最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++實現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解(推薦)

 更新時間:2020年04月02日 10:00:49   作者:含光Aries  
這篇文章主要介紹了c++實現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解,本文針對問題通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

在本程序中默認該現(xiàn)行規(guī)劃問題有最優(yōu)解

針對此問題:

#include<iostream>
using namespace std;

int check(float *sigema, int m) {
  for (int i = 1; i <= m ; i++) {
    if (sigema[i] > 0) {
      return 0;
    }
  }
  return 1;
}

//此程序已經(jīng)化為標準型的線性規(guī)劃問題中,且默認有最優(yōu)解
int main(int argc, char* argv[])
{
  //數(shù)據(jù)輸入部分
  int m, n;
  cout << "請輸入變量個數(shù):";
  cin >> m;
  cout << "請輸入不等式個數(shù):";
  cin >> n;
  float **matrix = new float*[n + 1];   //系數(shù)矩陣
  for (int i = 1; i <= n; i++) {
    matrix[i] = new float[m + 2];
  }
  float *cj = new float[m + 1];
  float *cB = new float[n + 1];  //基變量系數(shù)
  int *XB = new int[n + 1];  //用來標注基變量x的下標
  float *b = new float[n + 1];
  float *sigema = new float[n + 1];
  float *sita = new float[n + 1];
  //初始化
  for (int i = 0; i <= m; i++) {
    cj[i] = 0;
  }
  for (int i = 0; i <= n; i++) {
    cB[i] = 0;
    XB[i] = 0;
    b[i] = 0;
    sigema[i] = 0;
    sita[i] = 0;
  }
  cout << "請輸入目標函數(shù)系數(shù)(用空格間開):" << endl;
  for (int i = 1; i <= m; i++) {
    cin >> cj[i];
  }
  cout << "請輸入各不等式的系數(shù)和常量(用空格間開):" << endl;
  for (int i = 1; i <= n; i++) {
    cout << "不等式" << i << ": ";
    for (int j = 1; j <= m + 1; j++) {
      cin >> matrix[i][j];
    }
  }
  cout << "請輸入目標函數(shù)中基變量下標:" << endl;
  for (int i = 1; i <= n; i++) {
    cin >> XB[i];
    cB[i] = cj[XB[i]];
    //常量
    b[i] = matrix[i][m + 1];
  }

  //計算檢驗數(shù)
  for (int i = 1; i <= m; i++) {
    sigema[i] = cj[i];
    for (int j = 1; j <= n; j++) {
      sigema[i] -= cB[j] * matrix[j][i];
    }
  }

  while (check(sigema, m) == 0) {
    //尋找入基變量
  float maxn = sigema[1];
  int sigema_xindex = 0;
  float sigema_xcoefficient = 0;
  for (int i = 1; i <= m; i++) {
    if (maxn <= sigema[i]) {
      maxn = sigema[i];
      sigema_xindex = i;
      sigema_xcoefficient = cj[i];
    }
  }
  //計算sita
  for (int i = 1; i <= n; i++) {
    if (matrix[i][sigema_xindex] > 0) {
      sita[i] = b[i] / matrix[i][sigema_xindex];
    }
    else {
      sita[i] = 9999; //表示sita值為負數(shù)
    }
  }
  //尋找出基變量
  float minn = sita[1];
  int sita_xindex = 0;
  for (int i = 1; i <= n; i++) {
    if (minn >= sita[i] && sita[i] > 0) {
      minn = sita[i];
      sita_xindex = i;
    }
  }
  //入基出基變換,先入基再出基
  //入基操作
  for (int i = 1; i <= n; i++) {
    if (i == sita_xindex) {
      XB[i] = sigema_xindex;
      cB[i] = sigema_xcoefficient;
      break;
    }
  }
  //出基計算 
  //化1
  //cout << endl << "此處為化1的結果------" << endl;
  float mul1 = matrix[sita_xindex][sigema_xindex];
  for (int i = 1; i <= m; i++) {
    matrix[sita_xindex][i] /= mul1;
  }
  b[sita_xindex] /= mul1;
  //化0
  //cout << endl << "此處為化0的結果------" << endl;
  for (int i = 1; i <= n; i++) {
    if (i == sita_xindex) {
      continue;
    }
    float mul2 = matrix[i][sigema_xindex] / matrix[sita_xindex][sigema_xindex];
    for (int j = 1; j <= m; j++) {
      matrix[i][j] -= (matrix[sita_xindex][j] * mul2);
    }
    b[i] -= (b[sita_xindex] * mul2);
  }
  for (int i = 1; i <= n; i++) {
    if (i == sita_xindex) {
      continue;
    }
  }
  for (int i = 1; i <= m; i++) {
    sigema[i] = cj[i];
    for (int j = 1; j <= n; j++) {
      sigema[i] -= cB[j] * matrix[j][i];
    }
  }
  }
  float MaxZ = 0;
  float *result = new float[m + 1];
  for (int i = 0; i <= m; i++) {
    result[i] = 0;
  }
  for (int i = 1; i <= n; i++) {
    result[XB[i]] = b[i];
  }
  cout << "最優(yōu)解為:X = (";
  for (int i = 1; i < m; i++) {
    cout << result[i] << ",";
  }
  cout << result[m] << ")" << endl;
  for (int i = 1; i <= m; i++) {
    MaxZ += result[i] * cj[i];
  }
  cout << "最優(yōu)值為:MzxZ = " << MaxZ;
  return 0;
}

程序運行結果:

總結

到此這篇關于c++實現(xiàn)單純形法現(xiàn)行規(guī)劃問題的求解的文章就介紹到這了,更多相關c++單純形法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • VC雙畫布消除屏幕閃爍實例詳解

    VC雙畫布消除屏幕閃爍實例詳解

    這篇文章主要介紹了VC雙畫布消除屏幕閃爍實例詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • OpenCV實現(xiàn)拼圖板小游戲

    OpenCV實現(xiàn)拼圖板小游戲

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)拼圖板小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++ LeetCode1796字符串中第二大數(shù)字

    C++ LeetCode1796字符串中第二大數(shù)字

    這篇文章主要為大家介紹了C++ LeetCode1796字符串中第二大數(shù)字示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C語言 從根本上理解指針

    C語言 從根本上理解指針

    C語言這門課程在計算機的基礎教學中一直占有比較重要的地位,然而要想突破C語言的學習,對指針的掌握是非常重要的,本文將具體針對指針的基礎做詳盡的介紹
    2022-04-04
  • C語言初識動態(tài)內存管理malloc calloc realloc free函數(shù)

    C語言初識動態(tài)內存管理malloc calloc realloc free函數(shù)

    動態(tài)內存是相對靜態(tài)內存而言的。所謂動態(tài)和靜態(tài)就是指內存的分配方式。動態(tài)內存是指在堆上分配的內存,而靜態(tài)內存是指在棧上分配的內存
    2022-03-03
  • Qt使用Json的項目實踐

    Qt使用Json的項目實踐

    JSON是一種對源自Javascript的對象數(shù)據(jù)進行編碼的格式,但現(xiàn)在被廣泛用作互聯(lián)網(wǎng)上的數(shù)據(jù)交換格式,本文主要介紹了Qt使用Json的項目實踐,詳細的介紹了主要使用的類以及Json實戰(zhàn),感興趣的可以了解一下
    2023-09-09
  • C語言詳細講解if語句與switch語句的用法

    C語言詳細講解if語句與switch語句的用法

    用 if 語句可以構成分支結構,它根據(jù)給的條件進行判定,以決定執(zhí)行哪個分支程序段,C 語言中還有另外一種分支語句,就是 switch 語句
    2022-05-05
  • C++ 風靡一時的連連看游戲的實現(xiàn)流程詳解

    C++ 風靡一時的連連看游戲的實現(xiàn)流程詳解

    游戲“連連看”是源自臺灣的桌面小游戲,自從流入大陸以來風靡一時,也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧芳編寫的“阿達連連看”以其精良的制作廣受好評,這也成為顧方“阿達系列軟件”的核心產(chǎn)品。并于2004年,取得國家版權局的計算機軟件登記證書
    2021-11-11
  • C語言詳細分析講解關鍵字goto與void的作用

    C語言詳細分析講解關鍵字goto與void的作用

    我們在C語言中經(jīng)常會見到void,也會偶爾見到goto,那么C語言中既然有goto,為什么我們在代碼中見的很少呢?在以前很多的項目經(jīng)驗中,我們得到這樣一條潛規(guī)則:一般項目都是禁用goto的,程序質量與goto的出現(xiàn)次數(shù)成反比。自后也就造成了我們一般不會使用goto
    2022-04-04
  • 復數(shù)乘法中的結構體賦值實現(xiàn)代碼

    復數(shù)乘法中的結構體賦值實現(xiàn)代碼

    復數(shù)乘法中的結構體賦值實現(xiàn)代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10

最新評論

正定县| 镇雄县| 沽源县| 台中县| 陈巴尔虎旗| 尚义县| 喀喇| 香河县| 揭阳市| 绥滨县| 莱西市| 四会市| 阳春市| 得荣县| 安仁县| 喜德县| 平度市| 彰化县| 临泉县| 丽水市| 开江县| 谷城县| 洪江市| 当涂县| 华亭县| 理塘县| 浮梁县| 麻阳| 泸水县| 南安市| 玉田县| 通河县| 临洮县| 汝阳县| 酉阳| 光山县| 响水县| 五河县| 正蓝旗| 安陆市| 政和县|