Решение задач линейного программирования симплекс – методом

Автор работы: Пользователь скрыл имя, 01 Ноября 2010 в 14:55, Не определен

Описание работы

Постановка задачи и код программы

Файлы: 1 файл

лаб3.docx

— 35.38 Кб (Скачать файл)

      cout<<endl<<"---------------"<<endl;

while (exitt(delta)==false) // смотрим всё ли элементы в е отрицательны

{

      if (neogr(A)==true) {cout<<"no ogran";return 0;} // проверяем есть ли столбцы со всеми отрицательными элементами

      if (((bp[nomer])!=(bp_free()+1))&&((bp[1-nomer])!=(bp_free()+1)))

      {

            bp[nomer]=bp_free()+1;

            bp_[bp_free()]=1;

      }

      else {bp[nomer]=bp_free()+2;bp_[bp_free()+1]=1;} 

      //пересчитываем  матрицу А 

      Y0[nomer]=e[0];

      Y0[1-nomer]=Y0[1-nomer]-e[0]*A[1-nomer][s]; 

      for (int i=0;i<n;i++)

      {

            A1[nomer][i]=e[i+1];

            A1[1-nomer][i]=A[1-nomer][i]-e[i+1]*A[1-nomer][s];

      }

      for (int i=0;i<n;i++)

      {delta[i]=C[i]-(C[bp[0]-1]*A1[0][i]+C[bp[1]-1]*A1[1][i]);} 

      if (exitt(delta)==true)

      {

            cout << endl<<endl;

            for (int i=0;i<nn;i++)

            {

                  printf("%2.0f",C[bp[i]-1]);

                  cout<<" "<<"x";

                  printf("%1i",bp[i]);

                  cout<<" ";

                  printf("%2.0f",Y0[i]);

                  cout<<" ";   

                  for (int j=0;j<n;j++)

                  {printf("%7.2f",A1[i][j]);}

            cout << endl;

            }

      cout << "         ";

      for (int j=0;j<n;j++)

      printf("%7.2f",delta[j])

      cout << endl<< "       "<<endl<<endl;

      double aa[n];

      for (int i=0;i<n;i++) aa[i]=0;

      aa[bp[0]-1]=Y0[0];

      aa[bp[1]-1]=Y0[1]; 

      cout<<"б.п. {";

      for (int i=0;i<n;i++) cout <<aa[i]<<" ";

      cout <<"}"<<endl;

      if (aa[0]<0.0001) C[0]=0;

      cout<<"(.)max = ("<<C[0]*aa[0]<<";"<<C[1]*aa[1]<<")"<<endl;

      cout<<"function(.)max = " <<C[0]*aa[0]+C[1]*aa[1];

      return 0; 

      }

      s=maxi(delta); // ведущий столбец

      // находим минимум

      nomer=0; 

      if (((Y0[1]/A1[1][s])<0)||(A1[1][s])==0)

      {mini=(Y0[0]/A1[0][s]);nomer=0;}

      else {mini=(Y0[1]/A1[1][s]);nomer=1;}

      if ((A1[0][s])==0)

      {mini=(Y0[1]/A1[1][s]);nomer=1;}

      v_e=A1[nomer][s]; 

      e[0]=Y0[nomer]/v_e; 

      for (int i=0;i<n;i++)

      {

            e[i+1]=A1[nomer][i]/v_e;

      }

      // вывод

      for (int i=0;i<nn;i++)

      {

            printf("%2.0f",C[bp[i]-1]);

            cout<<" "<<"x";

            printf("%1i",bp[i]);

            cout<<" ";

            printf("%2.0f",Y0[i]);

            cout<<" ";  

            for (int j=0;j<n;j++)

            printf("%7.2f",A1[i][j]);

            cout <<"  ";  

            printf("%5.2f",mini);

            cout <<endl;

      }

      cout<<"-------------------"<<endl;

      cout << "         ";

      for (int j=0;j<n;j++) 

      printf("%7.2f",delta[j]);  

      cout << endl<< "  ";

      for (int j=0;j<n+1;j++)  

      {printf("%7.2f",e[j]);}

      cout<<endl<<"--------------"<<endl;

      update(A,A1);

}

      return 0 }

Информация о работе Решение задач линейного программирования симплекс – методом