亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xzdcx.h

?? 這是一個老師布置的作業程序,我是用C++ Builder 4.0寫的. 如果學過<線性規劃>的話,這個程序要干什么大家都知道,就是求解線性規劃問題,即在一組線性不等式或等式組的約束條件下求
?? H
字號:
/*
  這個文件是本程序的算法最核心的東西,
  定義了一個修正單純型表類TxzDcx(修正單純型拼音的首字母)
  和一個單純型表算法通道TxzDcxChannel
*/
//---------------------------------------------------------------------------
#ifndef xzDcxH
#define xzDcxH

#include "Matrix.h"
#include "Vector.h"
#include "TList.h"
#include "global.h"
#include "TDcxQ.h"
//---------------------------------------------------------------------------
#define TxzDE_OUTOFMEMMORY      0
#define TxzDE_INVALIDOPERATION  1
#define TxzDE_INVALIDPARAM      2
#define TxzDE_OUTOFBOUND        3

//修正單純型表異常類
class TxzDException
{
public:
    unsigned int mErrorCode;
public:
    TxzDException(){
    }
    TxzDException(unsigned int aE){
        mErrorCode=aE;
    }
    operator unsigned int(void){    //重載(int)強制轉換:如 if(e) dosomething;
        return mErrorCode;
    }
};



//修正單純型表節點數據
class TxzDcx
{
private:
   TCVector *mCVetBx;   //當前基解的正分量
   TMatrix *mMatU;      //當前矩陣的逆陣
   TCVector *mCVety;    //平衡方程的解
   TMVALUE mValz0;      //當前最優值~cx

   KTList<unsigned int> *mLB;    //當前基
public:
   //拷貝構造一個節點數據
   TxzDcx(TxzDcx &axzDcx)
   {
      int i,j;
      //當前基
      mLB = NULL;
      mLB = new KTList<unsigned int>;
      if (!mLB)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      for (axzDcx.mLB->First();!axzDcx.mLB->IsEof();axzDcx.mLB->Next()){
         mLB->Append(axzDcx.mLB->GetData());
      }

      //當前基矩陣的逆陣
      mMatU = NULL;
      mMatU = new TMatrix(axzDcx.mMatU);
      if (!mMatU)
         throw TxzDException(TxzDE_OUTOFMEMMORY);

      //當前基解的正分量
      mCVetBx = NULL;
      mCVetBx = new TCVector(axzDcx.mCVetBx);
      if (!mCVetBx)
         throw TxzDException(TxzDE_OUTOFMEMMORY);

      //平衡方程的解(~y = ~Bc * U)
      mCVety = NULL;
      mCVety = new TCVector(axzDcx.mCVety);
      if (!mCVety)
         throw TxzDException(TxzDE_OUTOFMEMMORY);

      //當前最優值 (z(0) = Bx * ~Bc)
      mValz0 = axzDcx.mValz0;
   }

   //由原線性規劃問題構造修正單純型表
   TxzDcx(TDcxQuestion *aDcxQ)
   {
      unsigned int i,j;

      unsigned int lRowCount = aDcxQ->mMatA->GetRowCount();
      unsigned int lColCount = aDcxQ->mMatA->GetColCount();

      //當前基
      mLB = NULL;
      mLB = new KTList<unsigned int>;
      if (!mLB)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      for (i=1;i<=lColCount;i++){
         if ((*aDcxQ->mCVetx)(i) > 0)
             mLB->Append(i);
      }

      //構造基矩陣
      TMatrix lMatM(lRowCount,lRowCount);
      unsigned int k;
      for (k=1,mLB->First();!mLB->IsEof();mLB->Next(),k++) {
         j=mLB->GetData();
         for (i=1;i<=lRowCount;i++)
            lMatM(i,k) = (*aDcxQ->mMatA)(i,j);
      }

      //當前基矩陣的逆陣
      mMatU = NULL;
      mMatU = new TMatrix(lRowCount,lRowCount);
      if (!mMatU)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      *mMatU = lMatM^-1;

      //當前基解的正分量
      mCVetBx = NULL;
      mCVetBx = new TCVector(lRowCount);
      if (!mCVetBx)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      for (i=1,mLB->First();!mLB->IsEof();mLB->Next(),i++) {
         (*mCVetBx)(i) = (*aDcxQ->mCVetx)(mLB->GetData());
      }

      //當前基費用向量
      TCVector *lCVetBc;   //當前基費用向量
      lCVetBc = NULL;
      lCVetBc = new TCVector(lRowCount);
      if (!lCVetBc)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      for (i=1,mLB->First();!mLB->IsEof();mLB->Next(),i++) {
         (*lCVetBc)(i) = (*aDcxQ->mCVetc)(mLB->GetData());
      }

      //平衡方程的解(~y = ~Bc * U)
      mCVety = NULL;
      mCVety = new TCVector(lRowCount);
      if (!mCVety)
         throw TxzDException(TxzDE_OUTOFMEMMORY);
      *mCVety = (~*mMatU) * (*(TMatrix*)lCVetBc);

      //當前最優值 (z(0) = ~Bx * Bc)
      mValz0 = (~*mCVetBx * (*((TMatrix*)lCVetBc)))(1,1);
   }


   ~TxzDcx()
   {
      delete mCVetBx;   //當前基解的正分量
      delete mMatU;     //當前矩陣的逆陣
      delete mCVety;    //平衡方程的解

      delete mLB;      //當前基
   }

   //傳進當前問題,計算取得該節點的非基判別行矩陣MatJudge及樞列坐標as、樞列向量VetPivot及樞行坐標位置,
   //返回:
   // 1  - 所有判別行z(j)-c(j)都<=0(即當前已是最優解)
   // -1 - 所有樞列VetPivot(j)都<=0(即無最優解,目標函數值趨向于正無窮)
   // 0  - 正常
   int GetPivot(TDcxQuestion* aDcxQ,TMatrix* aMatJudge,unsigned int* as,TCVector* aCVetPivot,unsigned int *ar)
   {
      unsigned int s,i;
      unsigned int lRowCount,lColCount;
      lRowCount = aDcxQ->mMatA->GetRowCount();
      lColCount = aDcxQ->mMatA->GetColCount();

      //計算非基變量的判別行:z(s)-c(s) = ~y*a(s) - c(s)
     // delete aMatJudge;
     // aMatJudge = new TMatrix(lColCount - lRowCount,2);
      TCVector lCVet(lRowCount);
      for (s=1,i=1;s<=lColCount;s++) {
         if (!mLB->Locate(s)) {
            (*aMatJudge)(i,1) = s;   //下標
            lCVet = aDcxQ->mMatA->CVector(s);
            (*aMatJudge)(i,2) = ((~*mCVety)*(*(TMatrix*)&lCVet))(1,1) - (*aDcxQ->mCVetc)(s); //值
       //?  (*aMatJudge)(i,2) = ((~*mCVety)*(aDcxQ->mMatA->CVector(s)))(1,1) - (*aDcxQ->mCVetc)(s); //值
            i++;
         }
      }

      //找非基變量的判別行的z(j)-c(j)的最大元素lMaxJudge及其位置s即樞列
      TMVALUE lMaxJudge = (*aMatJudge)(1,2);
      *as = 1;//StrToInt((AnsiString)((*aMatJudge)(1,1)));
      for (i=2;i<=lColCount-lRowCount;i++)
         if (lMaxJudge < (*aMatJudge)(i,2)) {
            lMaxJudge = (*aMatJudge)(i,2);
            *as = i;//StrToInt((AnsiString)((*aMatJudge)(i,1)));
         }

      //所有判別行z(j)-c(j)都<=0(即當前已是最優解)
      if (lMaxJudge <= 0)
         return 1;

      //計算樞列各元素(t(i,s) = ~U(i) * A(s))   <= A(s) = M * t(s)
      lCVet = aDcxQ->mMatA->CVector(StrToInt((AnsiString)((*aMatJudge)(*as,1))));
      for (i=1;i<=lRowCount;i++) {
         (*aCVetPivot)(i) = (mMatU->RVector(i) * *(TMatrix*)&lCVet)(1,1);
      }

      //確定樞行r
      TMVALUE lMinPivot;
      TMVALUE lTemp;
      bool lIsFirst=true;
      *ar = 0;
      for (i=1;i<=lRowCount;i++) {
         lTemp = (*aCVetPivot)(i);
         if (lTemp > 0) {
            lTemp = (*mCVetBx)(i) / lTemp;
            if (lIsFirst) {
               lMinPivot = lTemp;
               lIsFirst = false;
               *ar = i;
            }
            else if (lTemp < lMinPivot) {
               lMinPivot = lTemp;
               *ar = i;
            }
         }
      }

      //如果所有樞列VetPivot(j)都<=0(即無最優解,目標函數值趨向于正無窮)
      if (*ar == 0)
         return -1;

      //還無法確定能否達到最優
      return 0;
   }

   //根據樞列向量VetPivot和最大的z(s)-c(s)變換基
   void ChangeBase(TCVector* aCVetPivot,unsigned int ar,TMVALUE aMaxJudge,unsigned int as)
   {
      unsigned int i,j;
      unsigned int lRowCount;
      lRowCount = aCVetPivot->GetDimCount();

      //新i行 = (舊i行) -  (t(i)/t(r)) * (舊r行)
      for (i=1;i<=lRowCount;i++) {
         if (i!=ar) {
            //矩陣U
            mMatU->RAddition(i,ar,-(*aCVetPivot)(i)/(*aCVetPivot)(ar));
            //基解的正分量
            (*mCVetBx)(i) = (*mCVetBx)(i) - ((*aCVetPivot)(i)/(*aCVetPivot)(ar)) * (*mCVetBx)(ar);
         }
      }
      //平衡方程的解y (只有1行)
      for (j=1;j<=lRowCount;j++){
        (*mCVety)(j) = (*mCVety)(j) - (aMaxJudge/(*aCVetPivot)(ar)) * (*mMatU)(ar,j);
      }
      //當前最優值z(0)(只有1行,1列)
      mValz0 = mValz0 - (aMaxJudge/(*aCVetPivot)(ar)) * (*mCVetBx)(ar);

      //新r行 = (舊r行) / t(r)
      //矩陣U
      mMatU->RScale(ar,1/(*aCVetPivot)(ar));
      //基解的正分量
      (*mCVetBx)(ar) = (*mCVetBx)(ar) / (*aCVetPivot)(ar);

      //換基
      //B的第r個元素離基, s入基
      for (i=1,mLB->First();!mLB->IsEof() && i<=lRowCount;mLB->Next(),i++) {
         if (i == ar) {
            mLB->SetData(as);
            break;
         }
      }
   }

   //以整一個單存型表返回
   TMatrix GetMatxzDcx()
   {
      unsigned int lDimCount = mMatU->GetRowCount()+1;
      TMatrix lMatR(lDimCount,lDimCount);

      unsigned int i,j;
      //U
      for (i=1;i<=lDimCount-1;i++)
         for (j=2;j<=lDimCount;j++)
            lMatR(i,j) = (*mMatU)(i,j-1);

      //y-最后一行
      for (j=2;j<=lDimCount;j++)
         lMatR(lDimCount,j) = (*mCVety)(j-1);

      //Bx-第一列
      for (i=1;i<=lDimCount-1;i++)
         lMatR(i,1) = (*mCVetBx)(i);

      //z0-左下角
      lMatR(lDimCount,1) = mValz0;

      return lMatR;
   }


   TMatrix* GetMatU() { return mMatU; }
   TCVector* GetCVety() { return mCVety; }
   TCVector* GetCVetBx() { return mCVetBx; }
   TMVALUE GetValz0() { return mValz0; }
   KTList<unsigned int>* GetLB() { return mLB; }
};
//---------------------------------------------------------------------------

//單純型表算法通道
class TxzDcxChannel
{
private:
   KTList<TxzDcx*> *mLxzDcx;  //解路徑
   TxzDcx *mxzDcx;            //當前數據狀態

   TDcxQuestion *mDcxQ;       //原單純型問題

   //當前節點可得到的狀態,中間變量
   TMatrix *mMatJudge;     //非基判別行矩陣MatJudge
   TCVector *mCVetPivot;   //樞列向量
   unsigned int *ms,*mr;   //樞列坐標s,樞行坐標r
   int mResult;            //計算結果 1: 當前已是最優解, -1:當前可判斷無最優解,0: 正常

private:
   bool mIsValid;            //當前通道是否有效
   bool mIsRecord;         //是否記錄中間狀態

public:

   TxzDcxChannel()
   {
      mIsValid = false;
      mIsRecord = true;  //默認記錄中間狀態
   }

   ~TxzDcxChannel()
   {
      if (mIsValid) {  //如果通道有效(即有數據),先刪除數據
         for (mLxzDcx->First();!mLxzDcx->IsEof();mLxzDcx->Next())
            delete mLxzDcx->GetData();    //節點數據

         delete mLxzDcx;    //解路徑
         delete mDcxQ;      //原單純型問題
         delete mMatJudge;  //非基判別行矩陣MatJudge
         delete mCVetPivot; //樞列向量
         delete ms;         //樞列坐標s
         delete mr;         //樞行坐標r
      }
   }

   //設置工作狀態
   void SetStates(bool aIsRecord)
   {
      mIsRecord = aIsRecord;
      if (mIsValid) {  //如果通道有效(即有數據),先刪除數據
         for (mLxzDcx->First();!mLxzDcx->IsEof();mLxzDcx->Next())
            delete mLxzDcx->GetData();    //節點數據

         delete mLxzDcx;    //解路徑
         delete mDcxQ;      //原單純型問題
         delete mMatJudge;  //非基判別行矩陣MatJudge
         delete mCVetPivot; //樞列向量
         delete ms;         //樞列坐標s
         delete mr;         //樞行坐標r
      }
      mIsValid = false;
   }

   //提交數據,立即執行
   void operator<<(TDcxQuestion* aDcxQ)
   {
      if (mIsValid) {  //如果通道有效(即有數據),先刪除數據
         for (mLxzDcx->First();!mLxzDcx->IsEof();mLxzDcx->Next())
            delete mLxzDcx->GetData();    //節點數據

         delete mLxzDcx;    //解路徑
         delete mDcxQ;      //原單純型問題
         delete mMatJudge;  //非基判別行矩陣MatJudge
         delete mCVetPivot; //樞列向量
         delete ms;         //樞列坐標s
         delete mr;         //樞行坐標r
      }

      //拷貝原單純型問題
      mDcxQ = new TDcxQuestion(*aDcxQ);

      //由原單純型問題構造一個修正單純型表節點數據
      mxzDcx = new TxzDcx(mDcxQ);

      mMatJudge = new TMatrix(mDcxQ->mMatA->GetColCount()-mDcxQ->mMatA->GetRowCount(),2);   //非基判別行矩陣MatJudge
      mCVetPivot = new TCVector(mDcxQ->mMatA->GetRowCount());     //樞列向量
      ms = new unsigned int;            //樞列坐標s
      mr = new unsigned int;            //樞行坐標r

      //傳進原問題,計算取得非基判別行矩陣MatJudge及樞列坐標as、樞列向量VetPivot及樞行坐標位置,
      mResult = mxzDcx->GetPivot(mDcxQ,mMatJudge,ms,mCVetPivot,mr);

      mLxzDcx = new KTList<TxzDcx*>;  //解路徑
      mLxzDcx->Append(mxzDcx);

      if (mIsRecord) {  //要記錄中間結果
         while (mResult==0) {
            mxzDcx = new TxzDcx(*mxzDcx);   //拷貝一個新節點
            mxzDcx->ChangeBase(mCVetPivot,*mr,(*mMatJudge)(*ms,2),StrToInt((AnsiString)((*mMatJudge)(*ms,1))));  //換基
            mResult = mxzDcx->GetPivot(mDcxQ,mMatJudge,ms,mCVetPivot,mr);//計算樞行樞列
            mLxzDcx->Append(mxzDcx);
         }
      }
      else {     //不要記錄中間結果
         while (mResult==0) {
            mxzDcx->ChangeBase(mCVetPivot,*mr,(*mMatJudge)(*ms,2),StrToInt((AnsiString)((*mMatJudge)(*ms,1))));  //換基
            mResult = mxzDcx->GetPivot(mDcxQ,mMatJudge,ms,mCVetPivot,mr);//計算樞行樞列
         }
      }

      mIsValid = true;
   }

   //用鏈表取得所有節點數據
   void operator>>(KTList<TxzDcx*>* aLxzDcx)
   {
      TxzDcx *lxzDcx;

      //清空原來的數據
      for (aLxzDcx->First();!aLxzDcx->IsEof();aLxzDcx->Next())
         delete aLxzDcx->GetData();
      aLxzDcx->Empty();
         
      for (mLxzDcx->First();!mLxzDcx->IsEof();mLxzDcx->Next()) {
         lxzDcx = new TxzDcx(*mLxzDcx->GetData());
         aLxzDcx->Append(lxzDcx);
      }
   }


};
//---------------------------------------------------------------------------
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产偷v国产偷v亚洲高清| 国产精品色哟哟网站| 国产福利不卡视频| 亚洲国产人成综合网站| 欧美成人一区二区三区片免费| 91网站最新地址| 麻豆国产精品视频| 亚洲国产成人av好男人在线观看| 中文字幕不卡三区| 日韩欧美电影一二三| 欧美伊人久久久久久久久影院| 成人综合婷婷国产精品久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产一区二区三区日韩| 亚洲精品国产视频| 国产精品久久久99| 26uuu国产在线精品一区二区| 欧美日韩国产在线观看| 色综合久久中文综合久久97| 成人午夜av电影| 国产一区二区精品在线观看| 免费在线欧美视频| 亚洲国产精品久久久久婷婷884 | 亚洲国产高清在线| 精品国产亚洲一区二区三区在线观看| 欧美日韩黄色影视| 色综合久久88色综合天天| 99久久国产综合精品色伊| 粉嫩一区二区三区性色av| 国产精品综合在线视频| 狠狠色狠狠色合久久伊人| 日韩av不卡在线观看| 亚洲电影视频在线| 亚洲国产综合人成综合网站| 亚洲精品伦理在线| 夜夜嗨av一区二区三区四季av | 欧美一二三区在线| 欧美一区二区三区四区高清| 欧美蜜桃一区二区三区| 欧美日韩高清在线播放| 欧美日韩高清一区| 欧美精品国产精品| 欧美一区二区在线看| 精品久久国产老人久久综合| 日韩精品一区二区三区在线观看| 日韩欧美国产麻豆| 精品欧美一区二区久久| 久久久高清一区二区三区| 欧美国产禁国产网站cc| 国产精品国产三级国产aⅴ中文| 亚洲欧洲国产专区| 免费不卡在线视频| 日韩精品一级中文字幕精品视频免费观看 | 久久久噜噜噜久噜久久综合| 国产亚洲精品精华液| 中文一区在线播放| 亚洲欧美一区二区不卡| 亚洲18影院在线观看| 蜜桃在线一区二区三区| 国产美女主播视频一区| 成人性生交大合| 91亚洲国产成人精品一区二区三 | 亚洲成年人影院| 免费观看日韩av| 国产成人av影院| av电影一区二区| 欧美撒尿777hd撒尿| 日韩一区二区在线观看视频| 久久亚洲一区二区三区明星换脸| 国产精品国产精品国产专区不片 | 国产资源精品在线观看| 不卡一卡二卡三乱码免费网站| 日本高清不卡aⅴ免费网站| 欧美高清www午色夜在线视频| 欧美成人性福生活免费看| 国产日产精品一区| 一区二区三区精品在线观看| 日本不卡的三区四区五区| 国产精品一品二品| 日本久久一区二区| 精品国一区二区三区| 亚洲欧洲综合另类在线| 男女男精品视频网| 99v久久综合狠狠综合久久| 欧美另类videos死尸| 国产三级精品在线| 精品夜夜嗨av一区二区三区| 成人性视频免费网站| 欧美日韩第一区日日骚| 国产清纯在线一区二区www| 亚洲大尺度视频在线观看| 国产91精品久久久久久久网曝门| 欧美日韩成人综合天天影院 | 理论片日本一区| 91免费国产在线| 欧美一区二区精品| 亚洲欧洲一区二区在线播放| 日韩精品电影在线观看| 99re视频这里只有精品| 精品国产乱码久久久久久免费| 亚洲美女一区二区三区| 国产成人在线视频网站| 日韩一区二区在线免费观看| 一片黄亚洲嫩模| 成人网在线播放| 久久人人超碰精品| 日av在线不卡| 欧美日韩一区二区三区四区五区| 国产女主播一区| 国内精品久久久久影院色| 欧美日韩精品专区| 亚洲人午夜精品天堂一二香蕉| 国产a区久久久| 久久综合狠狠综合久久综合88 | www日韩大片| 免费成人美女在线观看| 欧美日韩亚洲另类| 亚洲资源在线观看| av电影天堂一区二区在线观看| 精品国产91亚洲一区二区三区婷婷| 亚洲第一精品在线| 欧美亚洲国产bt| 亚洲天堂成人在线观看| 国产成人综合网| 久久久九九九九| 国产成人综合亚洲网站| 久久这里都是精品| 在线观看日韩国产| 中文字幕在线一区二区三区| 成人免费高清在线观看| 中文在线一区二区| av在线不卡免费看| 国产精品久久久久国产精品日日| 国产电影一区在线| 中文字幕av一区二区三区高| 丁香亚洲综合激情啪啪综合| 国产欧美日本一区二区三区| 国产成人av电影在线| 国产视频一区在线观看| 国产99久久久国产精品潘金 | 欧美男人的天堂一二区| 洋洋成人永久网站入口| 在线观看亚洲成人| 亚洲午夜av在线| 欧美一级爆毛片| 国产又黄又大久久| 国产清纯美女被跳蛋高潮一区二区久久w| 极品少妇xxxx精品少妇| 国产视频在线观看一区二区三区| 成人h动漫精品一区二区| 亚洲天堂精品视频| 欧美午夜寂寞影院| 日本亚洲电影天堂| 欧美不卡一区二区| 国产精品一区一区三区| 中文字幕一区二区三区在线播放| 色丁香久综合在线久综合在线观看 | 欧美精品一区视频| 国产成人av电影在线播放| 综合激情成人伊人| 色噜噜狠狠色综合中国| 日精品一区二区三区| 久久蜜桃香蕉精品一区二区三区| 国产精华液一区二区三区| 亚洲精品乱码久久久久久黑人| 欧美福利视频导航| 国产精品一区二区你懂的| 亚洲蜜臀av乱码久久精品| 欧美精品高清视频| 国产一二精品视频| 亚洲美女偷拍久久| 欧美不卡激情三级在线观看| 成人精品小蝌蚪| 亚洲国产日日夜夜| 久久精品亚洲精品国产欧美| 色婷婷综合视频在线观看| 麻豆91免费看| 亚洲精品国产无天堂网2021| 日韩午夜激情视频| 91丨九色丨国产丨porny| 日av在线不卡| 亚洲免费成人av| 久久久久久综合| 欧美日韩在线综合| 国产成人亚洲精品狼色在线| 亚洲午夜免费电影| 国产欧美一区二区精品秋霞影院| 欧美视频在线一区| 国产精品456| 日本美女一区二区| 自拍av一区二区三区| 精品国产凹凸成av人导航| 欧日韩精品视频| 成人一区二区三区在线观看| 日本不卡一区二区三区高清视频| 国产精品成人一区二区三区夜夜夜| 日韩女同互慰一区二区| 欧美三级电影网| 91看片淫黄大片一级在线观看| 激情久久五月天|