Автор работы: Пользователь скрыл имя, 02 Ноября 2012 в 00:04, курсовая работа
Математическая модель – описание процесса математическими средствами, в которых отражены основные свойства и количественные соотношения реальной действительности. Предметом исследования математической теории исследования операций являются модели процессов оптимизации. Эти модели порождены задачами на условный экстремум. Важнейшей особенностью таких моделей является многовариантность допустимых решений. Задачей этого предмета является выявление структуры множества допустимых значений и разработка эффективных методов нахождения оптимального решения. О
Постановка задачи
2. Построение математической модели
3. Текстовый пример (выбор метода решения)
4. Разработка проекта программы
5. Кодирование модулей
Заключение
Литература
Приложение 1. Текст модулей программы
Приложение 2. Иллюстрационный плакат
Представление канонической задачи в виде симплекс- таблицы.
Первые строки таблицы, после заголовка, содержат коэффициенты расширенной матрицы канонической системы.
Слева - значения базисных переменных
Последняя строка таблицы называется индексной, и заполняется по правилу цен.
Таблица 1.
Базис |
X0 |
X2 |
X3 |
X4 |
X5 | |
|
20 |
3 |
4 |
1 |
1 |
0 |
X5 |
10 |
1 |
3 |
2 |
0 |
1 |
F |
0 |
-6 |
-3 |
-2 |
0 |
0 |
В данном случае неизвестное, вводимое в базис- X1 , а выводимое из базиса- X4 . Ключевой будет являться строка, соответствующая ключевому элементу. ( В данном случае 1-я строка)
Правила перехода от одной симплекс таблицы к другой.
1. В исходной таблице выделяем ключевой столбец, содержащий свободное неизвестное, вводимое в базис.
2. В ключевом столбце выбираем ключевой элемент являющийся знаменателем ключевого отношения. Ключевой элемент указывает на то неизвестное, которое выводится из базиса.
3. На пересечении базисных строк и столбцов в новой таблице проставляются единицы, а остальные элементы этих столбцов равны нулю.
Ключевое отношение – наименьшее отношение среди отношений свободных членов уравнений системы к соответствующим положительным коэффициентам свободного неизвестного.
Ключевой элемент указывает на то неизвестное, которое выводится из базиса.
4. Строку соответствующую введенному в базис неизвестному называют ключевой. Ее элементы равны частным от деления всех элементов соответствующей строки исходной таблицы на ключевой элемент.
5. Все остальные элементы новой таблицы вычисляем единообразно по правилу двух перпендикуляров.
Правило двух перпендикуляров:
Каждый элемент новой таблицы кроме элементов ключевой строки равен разности между соответствующим элементом исходной таблицы и произведением элементов, оказавшихся в основании перпендикуляров, опущенных “мысленно” из данного элемента исходной таблицы на ключевой столбец и ключевую строку.
Таблица 2.
Базис |
X0 |
X2 |
X3 |
X4 |
X5 | |
X1 |
6,65 |
1 |
1,35 |
0,3 |
0,3 |
0 |
X5 |
3,3 |
0 |
1,65 |
1,7 |
-0,3 |
1 |
F |
40 |
0 |
5 |
0 |
2 |
0 |
В индексной строке таблицы 2 нет отрицательных элементов. Следовательно, план является оптимальным.
Х*=(6.65, 0, 0, 0, 3.35)
F(x)*=40 ед. – есть максимальное значение целевой функции.
4. Разработка проекта программы
Алгоритм 1. Вывод математической
модели.
Алгоритм 2. Ввод данных задачи.
Алгоритм 3. Правило цен.
Алгоритм 4. Осуществление симплекс-метода.
Алгоритм 5. Создание массивов для
симплекс-метода.
Алгоритм 6. Главная программа.
5.Кодирование на языке С++
Среди множества языков программирования С++ занимает особое место. Он достаточно прост, лаконичен и исключительно эффективен. Язык С++ создан профессионалами для профессионалов и является расширением языка С для поддержки объектно-ориентированной парадигмы программирования.
C++ — чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения.
При создании C++ Бьёрн Страуструп стремился сохранить совместимость с языком C. Множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико — отчасти благодаря тому, что синтаксис C++ был основан на синтаксисе C.
Достоинства языка C++
Недостатки языка С++
Заключение
В данном курсовом проекте необходимо было рассчитать, как следует распределить ресурсы предприятия для получения максимальной выгоды.
Была проведена следующая работа: решена симплекс-методом, написана программа по алгоритму симплекс-метода на языке С++, проведена ее проверка и отладка. Программа работает корректно, и мы получили желаемый результат.
Результатом программы является окончательный оптимальный план:
X = (6.65, 0, 0, 0, 3.35)
Максимальное значение целевой функции равно:
F(X) = 40
Это значит, что для получения выгоды размером в 40 единиц заводу нужно создать 6,65 единиц продукции I. В этом случае мы получаем максимальную прибыль и не расходуем ресурс завода, превышающий запасы завода. Остаток ресурса B при этом плане равен 3,35, а ресурс А израсходован полностью.
Литература
“Самоучитель С++ с примерами и задачами” 2010г., Санкт-Петербург
Линейное программирование. Руководство к решению задач. - М.:ФИЗМАТЛИТ, 2005.
Приложение 1
Текст модулей программы
#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
int i,j; int m1,m2; int n1,n2; int s; int k; int me;
//----------------------------
//-------------------------Выв
//----------------------------
void Model(int a, int b, float **x, int c1, int c2, int c3)
{
cout<<"_______________________
x[0][4]=1;
x[1][5]=1;
cout<<"Main model\n";
for(i=0;i<2;i++)
{
for(j=1;j<6;j++)
{
cout<<x[i][j]<<"x"<<j;
if (j<5) cout<<" + ";
}
cout<<" = "<<x[i][0]<<"\n";}
cout<<"F(x)= "<<c1<<"x1 + "<<c2<<"x2 + "<<c3<<"x3 -> max\n";
}
//----------------------------
//----------------------------
//----------------------------
void Entershmit(int a, int b, float **x, int c1, int c2, int c3)
{
for(i=0;i<2;i++)
{
for(j=1;j<4;j++)
{
cout<<"Enter koeficient x"<<j<<" "<<i+1<<"-ogo ogr. ";
cin>>x[i][j];
}
cout<<"Enter result "<<i+1<<"-ogo ogr. ";
cin>>x[i][0];
}
cout<<"_______________________
cout<<"Math model\n";
for(i=0;i<2;i++)
{
for(j=1;j<4;j++)
{
cout<<x[i][j]<<"x"<<j;
if (j<3) cout<<" + ";
}
cout<<" <= "<<x[i][0]<<"\n";}
cout<<"F(x)= "<<c1<<"x1 + "<<c2<<"x2 + "<<c3<<"x3 -> max\n";
m1=4; m2=5; n1=4; n2=5;
}
//----------------------------
//----------------------------
//----------------------------
void Priceshmidt(float **x, int c1, int c2, int c3)
{ getch();
x[2][0]= 0;
x[2][1]=(-1)*c1;
x[2][2]=(-1)*c2;
x[2][3]=(-1)*c3;
x[2][4]= 0;
cout<<"\n";
cout<<"_______________________
cout<<"Table 1\n";
cout<<"_______________________
cout<<"\n";
for (i=0; i < 3; i++) {
for (j = 0; j < 6; j++) {
printf("%5.1f",x[i][j]);
}
cout<<"\n";
}
}
//----------------------------
//---------------------------С
//----------------------------
void Perpenshmidt(float **x)
{getch();
float min; int i; int j;
min=x[2][1];
for (i = 1; i < 6; i++)
{
if (x[2][i]<=min) {min=x[2][i]; k=i;
}
}
cout<<"\n";
cout<<"_______________________
cout<<"\n";
cout<<"Main column: "<<k+1;
cout<<"\n";
min=x[0][0]/x[0][k];
s=0;
me=x[0][k];
for (j = 0; j < 2; j++)
{
if ((x[j][0]/x[j][k])<min) {s=j; min=x[j][0]/x[j][k]; me=x[j][k];
if (j==0) { m1=k; n1=m1; }
}
}
cout<<"Main stroke: "<<s+1;
cout<<"\n";
cout<<"Main element: "<<me;
getch();
}
//----------------------------
//---------------------------
//---------------------------
float** MassiveEffect(float **x)
{ int i; int j; float temp;
float** d=new float*[3];
d[i]=new float[6];
//------Копирование матрицы-------
for (i = 0; i < 3; i++)
{
for (j = 0; j < 6; j++)
{
d[i][j]=x[i][j];
}
}
cout<<"\n";
//--Преобразование ключевой строки---
for (j = 0; j < 6; j++)
{
d[s][j]=float (d[s][j]/me);
}
for (i = 0; i < 3; i++)
{
for (j = 0; j< 6; j++)
{
if ((i!=s) && (j!=m1) && (j!=m2)) {
d[i][j]=x[i][j]-x[i][k]*d[s][
}
}
for (i = 0; i < 3; i++) {
temp=d[i][k];
for (j = 0; j < 6; j++) {
if (i!=s) {
d[i][j]=d[i][j]-temp*d[s][j];
}
}
cout<<"\n";
cout<<"_______________________
cout<<"Table 2\n";
cout<<"_______________________
cout<<"\n";
for (i=0; i < 3; i++) {
for (j = 0; j < 6; j++) {
printf("%5.1f",d[i][j]);
}
cout<<"\n";
}
}
cout<<"\n";
cout<<"Targeting function = "<<d[2][0];
return(d);
Информация о работе Программа расчета оптимального распределения ресурсов