|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2015, 16:29 | #1 |
Регистрация: 08.02.2015
Сообщений: 3
|
Симплекс-метод
Уважаемые программисты,очень нужна помощь.
!Помогите пожалуйста с программой.Дана задача: Для изготовления изделий двух видов склад может отпустить металла не более 150 кг, причем на изделие первого вида расходуется пять килограмм, а на изделие второго вида три килограмма. Требуется спланировать производство так, чтобы была обеспечена наибольшая прибыль, если изделий первого вида требуется изготовить не более 20 штук, а изделий второго вида не более 25 штук, причем одно изделие первого вида стоит 7 руб., а изделие второго вида стоит 8 руб. И написать программу для решения этой задачи симплекс методом. 5x1 + 3x2 +x3 =150 x1 +x4 =20 x2 +x5 =25 x1, x2, x3, x4, x5≥0 F(x)= 7x1 +8x2 +x3 +x4 +x5 Задача решена. Программа тоже есть,но с ней небольшие проблемы. #include "iostream" #include "locale" using namespace std; int main() { int a,b,stl,str,l=0; float tab[10][10],min=1000,c[10],tab1[10][10],x=1000; setlocale(LC_ALL, "russian"); cout<<"Введите количество строк и столбцов: "<<endl; cin>>a>>b; //заполнение начальной матрицы for (int i=0;i<a;i++) { for (int j=0;j<b;j++){ cout<<"Введите ["<<i+1<<"]["<<j+1<<"] элемент таблицы: "<<endl; cin>>(tab[i][j]); } } cout<<"первая итерация"<<endl; for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ cout<<tab[i][j]<<" "; } cout<<endl; } //проверка на оптимальность while(1){ l=0; for (int i=0;i<b;i++){ if (tab[a-1][i]<0) {l=l+1;} } if (l==0){ for (int j=1;j<b-a+1;j++){ int kol=0,nol=0,ind; for (int i=0;i<a-1;i++){ if (tab[i][j]==1) { kol++;ind=i; } else nol++; } if ((kol==1) && (a-nol==2)) cout<<"x="<<j<<"="<<tab[ind][0]<<endl; } cout<<"Решение оптимально"<<endl; //ВЫВОД МАТРИЦЫ for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ cout<<tab[i][j]<< "\t" ; } cout<<endl; } cout<<"F(x)="<<tab[a-1][0]; for (int j=0;j<a-1;j++){ if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl]; else c[j]=1000; } for (int j=0;j<a-1;j++){ if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl]; else c[j]=1000; } //пересчетновойтаблицы for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ tab1[i][j]=tab[i][j]-(tab[i][stl]*tab[str][j]/tab[str][stl]); tab1[i][stl]=0; tab1[str][stl]=1; tab1[str][j]=tab[str][j]/tab[str][stl]; } } //переприсвоенние матриц и вывод их на экран for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ tab[i][j]=tab1[i][j]; } } system("pause"); return 0; } x=1000; //поискключевогостолбца for (int i=1;i<b;i++){ if (tab[a-1][i]<=x){ x=tab[a-1][i]; stl=i; } } //поискключевойстроки for (int j=0;j<a-1;j++){ if (tab[j][stl]>0) c[j]=tab[j][0]/tab[j][stl]; else c[j]=1000; } cout<<endl<<"Массив для нахождения ключевой строки"<<endl; for (int j=0;j<a-1;j++) cout<<c[j]<<" "; cout<<endl; for (int i=0;i<(a-1);i++) if (c[i]<min){ min=c[i]; str=i; } cout<<endl<<"Kлючевой столбец и ключевая строка "<<stl<<" "<<str<<" "<<endl<<endl; cout<<"Ключевой элемент: "<<tab[str][stl]<<endl<<endl; //пересчетновойтаблицы for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ tab1[i][j]=tab[i][j]-(tab[i][stl]*tab[str][j]/tab[str][stl]); tab1[i][stl]=0; tab1[str][stl]=1; tab1[str][j]=tab[str][j]/tab[str][stl]; } } //переприсвоенние матриц и вывод их на экран for (int i=0;i<a;i++){ for (int j=0;j<b;j++){ tab[i][j]=tab1[i][j]; } } } system("pause"); return 0; } Помогите пожалуйста,как добавить вторую итерацию вот так вот: Вторая итерация 75 5 0 1 0 -3 20 1 0 0 1 0 25 0 1 0 0 1 200-7 0 0 0 8 Вот чтобы она стояла до этого Массив для нахождения ключевой строки 15 20 1000 Ключевой столбец и ключевая строка 1 0 Ключевой элемент:5 |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Симплекс-метод | Polina B. | Помощь студентам | 0 | 09.02.2015 20:51 |
Симплекс метод | HUGO+GO | Общие вопросы по Java, Java SE, Kotlin | 0 | 18.05.2014 10:53 |
Симплекс метод | kobe8241 | Помощь студентам | 0 | 01.12.2011 15:14 |
симплекс метод | ASPknopixx | Помощь студентам | 1 | 16.05.2011 22:08 |
симплекс метод | Антонина@com | Microsoft Office Excel | 1 | 13.04.2011 18:27 |