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

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

?? jisuan1.pas

?? 運籌學算法與編程實踐附書源碼
?? PAS
字號:
unit jisuan1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons;

type
  Tfrmjisuan1 = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn5: TBitBtn;
    Label3: TLabel;
    BitBtn4: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn5Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure xianshi;
  end;

var
  frmjisuan1: Tfrmjisuan1;

function  puanduan_d:Boolean;//判斷目標函數
function  find_s:integer;//尋找主列
function  puanduan_r(s:Integer):Boolean;//判斷主行是否存在
function  find_r(s:integer):Integer;//尋找主行
procedure  diedai;//迭代變換
{-----------------jisuan1、jisuan2兩單元公用的函數和過程----------------}
implementation
  {$R *.DFM}
uses jisuan2,shuru;//調用另外兩個單元的數據
var  xianshi1:myarray2;//單元變量,用于顯示結果
procedure tiaozhen;
var temp_A:myarray;//臨時變量,輔助A的調整
    temp_b:array[1..long] of real;//臨時變量,輔助b的調整
    k:Integer;//記錄temp_A的行數
    i,j:Integer;
begin
k:=0;ziyou:=0;man:=0;
for i:=1 to long do
  for j:=1 to long do
    temp_A[i,j]:=0;
//初始化變量
for i:=1 to m do
  for j:=1 to n do
    temp_A[i,j]:=A[i,j];
//將系數矩陣付給臨時變量
for i:=1 to m do
  if  opt[i]=-1 then
    begin
      k:=k+1;//已變換的行數的累加
      ziyou:=ziyou+1;//松弛變量個數累加
      for j:=1 to n do
        temp_A[k,j]:=A[i,j];//實現系數矩陣行的交換
      temp_A[k,n+ziyou]:=1;//添加松弛變量系數
      juece[k]:=n+ziyou;//記錄決策變量
      temp_b[k]:=b[i];//交換限定向量(常數項)
    end;
{------------對于操作符是小于號情況的處理----------------------------}
for i:=1 to m do
  if  opt[i]=1 then
    begin
      opt[i]:=0;//將大于號轉化為等于號,以進行下一步處理
      ziyou:=ziyou+1;
      temp_A[i,n+ziyou]:=-1;
    end;
{------------對于操作符是大于號情況的初步處理-------------------------}
for i:=1 to m do
  if  opt[i]=0 then
    begin
      k:=k+1;
      man:=man+1;//累加人工變量的個數
      for j:=1 to n do
        temp_A[k,j]:=A[i,j];//交換系數矩陣的行
      temp_A[k,n+ziyou+man]:=1;
      temp_b[k]:=b[i];
      juece[k]:=n+ziyou+man;
    end;
{---------對于操作符是等于號,以及由大于號轉換而來的情況的處理--------}
for i:=1 to m do
  for j:=1 to n+ziyou+man do
    A[i,j]:=temp_A[i,j]; //將調整后的系數矩陣付給全局變量A
for i:=1 to m do
  b[i]:=temp_b[i];//將調整后的限定向量付給全局變量b
end;
{-----對應原理的第一步,約束變換。加入松弛變量和人工變量,構造
不帶目標函數的初始表格,并調整使基變量(juece)的后man行為人工變量----}

procedure  jisuan_d_z;
var i,j:integer;
begin
for j:=low(d) to high(d) do
  d[j]:=0; //初始化人工目標函數系數
for j:=1 to n+ziyou do
  for i:=m-man+1 to m do
    d[j]:=d[j]-A[i,j];
//計算人工目標函數系數
w:=0;//初始化人工目標函數值
for i:=m-man+1 to m do
  w:=w-b[i];
//計算人工目標函數值
end;
{----------對應原理的第二步-------------------------------------------}

function  puanduan_d:Boolean;
var j:Integer;
begin
Result:=true;
for j:=1 to n+ziyou+man do
  if d[j]<-0.000001 then // 存在目標函數系數為負數
    begin
      Result:=False;
      Break;
    end;
end;
{----------對應原理第三步,判斷目標函數有無負值------------------------}

function  find_s:integer;
var temp:real;
    i:integer;
begin
temp:=d[1];
Result:=1;
for i:=2 to high(d) do
  if d[i]<temp then
    begin
      temp:=d[i];
      Result:=i;
    end;
end;
{----------找主元列。從行向量中選取最小的數,返回其位置----------------}

function  puanduan_r(s:Integer):Boolean;
var i:Integer;
begin
Result:=False;
for i:=1 to m do
  if A[i,s]>0 then
    begin
      Result:=True;
      Break;
    end;
end;
{---------判斷的r列的元素有無正值--------------------------------------}

function  find_r(s:integer):Integer;
var i,k:Integer;
    temp:real;//臨時變量,記錄比值大小
begin
k:=0;
for i:=1 to m do
  if A[i,s]>0 then
    begin
      k:=i;
      break;
    end;//首先尋求一個正的元素
Result:=k;
temp:=b[k]/A[k,s];
for i:=k+1 to m do
  if (A[i,s]>0) and (b[i]/A[i,s]<temp) then
    Result:=i;//著比值最小的行
end;
{----------找主元行。從主元列中選取比之最小的行,返回其位置-----------}

procedure  diedai;
var temp:Real;//保存主元素的值
    i,j:Integer;
    yi:array[1..long]  of real;
begin
juece[r]:=s;//更新決策變量
temp:=A[r,s];
for j:=1 to n+ziyou+man do
  A[r,j]:=A[r,j]/temp;
b[r]:=b[r]/temp;//變換主元素行
for i:=1 to m  do
 begin
   yi[i]:=A[i,s];
   if  i<>r then //變換主行以外的所有行
     begin
       for j:=1 to n+ziyou+man do
         A[i,j]:=A[i,j]-A[r,j]*yi[i];//系數據陣的變換
       b[i]:=b[i]-b[r]*yi[i];//檢驗數的變換
      end;
 end;
yi[m+1]:=d[s];//借用yi的第m+1行存放主元列所對應的目標函數系數
for j:=1 to n+ziyou+man do
  d[j]:=d[j]-A[r,j]*yi[m+1];
//變換目標函數系數
w:=w-yi[m+1]*b[r];//更新目標函數值
for i:=1 to m do
  if i=r then A[i,s]:=1
  else  A[i,s]:=0;//變換主元素列
end;
{----以上四個過程對應原理第四步,完成了迭代變換---------------------}

function nbv:boolean;
var i:Integer;
begin
Result:=true;
for i:=1 to m do
 if juece[i]>n+ziyou then
   begin
     Result:=false;
     break;
   end;
end;
{--------對應原理的第五步,判斷基變量中是否還有人工變量--------------}

function nbv_0:boolean;
var i:integer;
begin
Result:=true;
for i:=1 to m do
  if (juece[i]>n+ziyou) and (b[i]<>0) then
    begin
      Result:=False;
      Break;
    end;
end;
{--------對應原理的第六步的前一部分,判斷所有有人工變量的值是否全為0--}

procedure  delete_nbv;
var i,j,k:Integer;
    temp_a:myarray;
    temp_b:array[1..long] of real;
    temp_juece:array of integer;
    temp_lie:array of integer;
begin
for i:=1 to long do
  for j:=1 to long do
    temp_A[i,j]:=0;
for i:=1 to long do
    temp_b[i]:=0;
   //初始化臨時變量
for i:=1 to m do
  if juece[i]>n+ziyou then
    begin
      SetLength(temp_lie,high(temp_lie)+2);
      temp_lie[high(temp_lie)]:=juece[i];
    end//記錄人工變量的位置
  else
    begin
      for j:=1 to n+ziyou+man do
        temp_a[i,j]:=a[i,j];//更新系數矩陣
      temp_b[i]:=b[i];//更新限定向量
      SetLength(temp_juece,high(temp_juece)+2);
      temp_juece[high(temp_juece)]:=juece[i];//更新決策變量
    end;
for k:=low(temp_lie) to high(temp_lie) do
  for i:=1 to m-length(temp_lie) do
     temp_a[i,temp_lie[k]]:=0;//刪除對應的列
for i:=1 to m do
  for j:=1 to n+ziyou+man do
    A[i,j]:=temp_a[i,j];//將更新后的矩陣
for i:=1 to m do
  b[i]:=temp_b[i];
for i:=low(temp_juece) to high(temp_juece) do
  juece[i+1]:=temp_juece[i];
for i:=length(temp_juece)+1 to m do
  juece[i]:=0;
man:=man-length(temp_lie);//更新人工變量的值
end;
{--------對應原理的第六步的后一部分,刪除人工變量所在的行、列------}

procedure  delete_man;
var i,j:integer;
begin
for j:=n+ziyou+1 to n+ziyou+man do
  begin
    for i:=1 to m do
      A[i,j]:=0;//刪除人工變量所對應的系數的列
    d[j]:=0;//刪除人工變量的目標系數
  end;
man:=0;//更新人工變量的值
end;
{--------對應原理的第七步,刪除人工變量的所有列列------------------}
procedure tfrmjisuan1.xianshi;
var i,j:Integer;
    x0,y0:Integer;//控制輸入框的位置
begin
for i:=0 to frmjisuan1.Panel1.ComponentCount-1 do
  frmjisuan1.Panel1.Components[i].Free;
//釋放原有文本框
x0:=(panel1.Width-(n+ziyou+man+2)*40) div 2;
y0:=(panel1.Height-(m+1)*28) div 2;
for i:=0 to m+1 do
 for j:=0 to n+ziyou+man+1  do
   begin
    xianshi1[i,j]:=tedit.Create(self);
    xianshi1[i,j].parent:=frmjisuan1.Panel1;
    xianshi1[i,j].Width:=40;
    xianshi1[i,j].left:=x0+j*xianshi1[i,j].Width;
    xianshi1[i,j].top:=y0+i*xianshi1[i,j].Height;
  end;
for i:=1  to m do
  for j:=1 to  n+ziyou+man do
    xianshi1[i,j].text:=FormatFloat('0.####',A[i,j]);
//顯示系數矩陣
xianshi1[0,0].text:='基';
for i:=1 to m do
  xianshi1[i,0].text:='x'+inttostr(juece[i]); //顯示基變量
//注意m值的改變
xianshi1[m+1,0].Text:='檢';
for j:=1 to n+ziyou+man do
  xianshi1[m+1,j].Text:=FormatFloat('0.#####',d[j]);
//顯示目標函數
xianshi1[0,n+ziyou+man+1].text:='b';
for j:=1 to n+ziyou+man do
  xianshi1[0,j].text:='x'+inttostr(j);
//表頭位置,變量名
for i:=1 to m do
  xianshi1[i,n+ziyou+man+1].Text:=FormatFloat('0.####',b[i]);
xianshi1[m+1,n+ziyou+man+1].Text:=FormatFloat('0.####',w);
{---------自定義過程,顯示表格迭代結果--------------------------}
end;

procedure Tfrmjisuan1.FormCreate(Sender: TObject);
begin
BitBtn2.Enabled:=false;
BitBtn4.Enabled:=False;
end;
procedure Tfrmjisuan1.BitBtn3Click(Sender: TObject);
begin
tiaozhen;//調整約束方程的位置
jisuan_d_z;//計算目標函數系數和目標函數值
xianshi;//先是第一階段初始單純形表
BitBtn3.Enabled:=false;
BitBtn2.enabled:=true;
end;
{----------顯示標初始單純性表,控制按鈕操作----------------------------}

procedure Tfrmjisuan1.BitBtn2Click(Sender: TObject);
label 1;
begin
1:if puanduan_d then // 判斷目標函數系數是否全為正值
   if nbv then //基變量全為非人工變量的情況
      begin
       xianshi;//顯示第一階段最終單純形表
       BitBtn4.Enabled:=True;
       ShowMessage('請單擊OK進入第二階段求解');
       BitBtn2.Enabled:=False;
      end
   else
     begin
       if nbv_0 then //人工基變量的值全為0
         begin
           xianshi; //顯示第一階段最終單純形表 
           BitBtn4.Enabled:=True;
           ShowMessage('請單擊OK進入第二階段求解');
           BitBtn2.Enabled:=False;
         end
       else
         begin
           xianshi;
           ShowMessage('原線性規劃無可行解');
           BitBtn4.Enabled:=False;
           exit; //退出該事件
         end;
     end
{----------第一階段的人工目標函數系數全為非負值的處理-----------------}
else//存在負值時,進一步迭代
  begin
    s:=find_s;//尋找主列
    if puanduan_r(s) then//判斷主列,有無正值
      begin //有,則選取主行,進行新一輪的迭代
        r:=find_r(s);//調用自定義函數,尋找主行
        diedai;//旋轉變換,得到新的單純形表
        goto 1; //重新判斷
      end
    else//主列元素,無正值,則原線性規劃為無界解
      begin
        xianshi;
        ShowMessage('原線性規劃具有一個無界解');
        Exit;
      end;
  end;
{----------第一階段的人工目標函數系數非全為正值的處理-----------------}
end;

procedure Tfrmjisuan1.BitBtn5Click(Sender: TObject);
begin
frmshuru.close;//終止程序運行
end;

procedure Tfrmjisuan1.BitBtn1Click(Sender: TObject);
begin
frmshuru.Show;
//返回到數據輸入窗口,修改或更新初始數據
end;

procedure Tfrmjisuan1.BitBtn4Click(Sender: TObject);
var j:Integer;
begin
if nbv then delete_man
//所有人工變量均非基變量時,調用過程delete_man刪除全部人工變量
else if nbv_0 then delete_nbv;
//人工變量依然在機變量中,但其值均為0時,調用delete_nbv刪除人工變量
//所對應的主元行、列
for j:=1 to n+ziyou+man do
  d[j]:=c[j];//傳遞原目標函數系數
frmjisuan2.Show;
frmjisuan2.BitBtn4.Enabled:=True;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜电影在线播放| 亚洲国产精品久久艾草纯爱| 日韩美女精品在线| 久久成人免费网| 欧美在线综合视频| 欧美激情在线观看视频免费| 日日夜夜免费精品| 成人av免费在线| 久久色在线视频| 午夜精品一区二区三区免费视频| 成人动漫中文字幕| 久久综合久久鬼色中文字| 午夜一区二区三区在线观看| 99在线精品视频| www国产亚洲精品久久麻豆| 亚洲国产精品一区二区尤物区| 成人午夜看片网址| 国产欧美一区二区三区鸳鸯浴| 日本v片在线高清不卡在线观看| aaa亚洲精品一二三区| 久久久无码精品亚洲日韩按摩| 日韩精品91亚洲二区在线观看| 日本韩国欧美三级| 中文字幕一区二区三区乱码在线| 国产精品99久久久久久有的能看| 91成人免费电影| 一个色综合av| 日本道精品一区二区三区| 中文字幕第一区综合| 国产成人精品亚洲777人妖| 精品国产乱码久久久久久免费 | 日韩欧美在线123| 午夜一区二区三区视频| 精品视频资源站| 亚洲午夜在线视频| 欧美人伦禁忌dvd放荡欲情| 亚洲综合无码一区二区| 欧美三级电影在线看| 亚洲成人一区二区| 在线播放欧美女士性生活| 日韩国产在线一| 91精品国产色综合久久久蜜香臀| 亚洲mv大片欧洲mv大片精品| 7777精品伊人久久久大香线蕉| 日韩高清一区在线| 精品粉嫩aⅴ一区二区三区四区 | 婷婷中文字幕一区三区| 69堂国产成人免费视频| 久久91精品久久久久久秒播| 久久久噜噜噜久噜久久综合| 国产成人鲁色资源国产91色综| 国产精品视频一区二区三区不卡| 91香蕉视频mp4| 亚洲第一福利一区| 久久伊人中文字幕| 99re在线视频这里只有精品| 亚洲综合成人在线| 欧美成人一级视频| 99在线热播精品免费| 天天综合色天天综合色h| 精品成人a区在线观看| 97久久人人超碰| 性感美女久久精品| 亚洲国产高清在线| 在线观看av一区二区| 蜜桃精品在线观看| 亚洲少妇中出一区| 日韩一区二区三| 91亚洲精品久久久蜜桃| 捆绑紧缚一区二区三区视频| 国产精品美女久久久久高潮| 欧美精品乱码久久久久久按摩| 国产另类ts人妖一区二区| 亚洲激情在线播放| 26uuu精品一区二区在线观看| 91在线视频官网| 激情综合色综合久久综合| 中文字幕人成不卡一区| 欧美videossexotv100| 在线看不卡av| 国产精品资源站在线| 图片区小说区国产精品视频| 国产精品系列在线| 欧美刺激午夜性久久久久久久 | 亚洲高清中文字幕| 国产精品毛片大码女人| 欧美v日韩v国产v| 日本韩国一区二区三区视频| 国产成人免费在线视频| 秋霞电影一区二区| 亚洲午夜私人影院| 亚洲色图丝袜美腿| 久久久久久久久一| 日韩久久免费av| 欧美丰满美乳xxx高潮www| 一本到一区二区三区| 国产成人综合精品三级| 久久99久久久久久久久久久| 亚洲国产乱码最新视频| 一区二区三区国产精华| 国产精品久久久一区麻豆最新章节| 日韩视频在线你懂得| 欧美高清一级片在线| 欧洲亚洲精品在线| 91电影在线观看| 成人av网站在线| av资源网一区| av成人免费在线观看| 99久久伊人网影院| 91在线观看免费视频| 成人黄动漫网站免费app| 高清beeg欧美| 暴力调教一区二区三区| 成人午夜视频福利| 99精品欧美一区| 色悠悠亚洲一区二区| 色婷婷久久久亚洲一区二区三区| 99re这里只有精品首页| 色噜噜狠狠色综合中国| 在线观看91精品国产入口| 欧美性生活一区| 欧美精品三级在线观看| 欧美卡1卡2卡| 日韩欧美一级二级三级久久久| 日韩午夜av一区| 久久久精品tv| 亚洲桃色在线一区| 亚洲综合色区另类av| 日韩电影免费在线观看网站| 蜜臀精品久久久久久蜜臀| 久久99在线观看| 成人动漫一区二区三区| 一本一道波多野结衣一区二区| 欧美影院午夜播放| 欧美大片一区二区| 国产精品网曝门| 亚洲图片欧美色图| 免费在线观看成人| 国产suv精品一区二区三区| 91丨porny丨最新| 欧美理论电影在线| 国产欧美日韩综合| 一区二区三区在线免费| 老汉av免费一区二区三区| 成人免费av在线| 欧美肥妇free| 欧美国产日韩亚洲一区| 亚洲综合一二三区| 国产一区二区久久| 91极品视觉盛宴| 久久视频一区二区| 亚洲大片免费看| 丁香一区二区三区| 911精品产国品一二三产区| 国产亚洲视频系列| 亚洲在线视频网站| 粉嫩高潮美女一区二区三区| 欧美人体做爰大胆视频| 中文av字幕一区| 麻豆freexxxx性91精品| www.日本不卡| 精品粉嫩aⅴ一区二区三区四区| 一区二区三区中文免费| 激情欧美一区二区| 欧美日韩成人在线一区| 中文字幕在线免费不卡| 喷白浆一区二区| 日本高清无吗v一区| 国产欧美精品区一区二区三区 | 久久女同精品一区二区| 亚洲一区二区av电影| 成人av午夜影院| 精品国产sm最大网站| 日韩电影免费一区| 欧美性受极品xxxx喷水| 亚洲欧洲日产国产综合网| 久久99国产精品免费| 欧美三级中文字幕在线观看| 中文字幕av一区二区三区| 成人国产精品免费观看视频| 日韩一区二区三区免费看 | 日韩一区二区免费在线观看| 亚洲综合激情另类小说区| 成人app软件下载大全免费| 久久影院午夜片一区| 欧美aaaaa成人免费观看视频| 色呦呦一区二区三区| 中文字幕视频一区二区三区久| 国产成人在线视频免费播放| 日韩视频永久免费| 捆绑调教一区二区三区| 欧美一级理论性理论a| 亚洲第一在线综合网站| 欧美日韩一级黄| 五月婷婷另类国产| 在线亚洲精品福利网址导航| 艳妇臀荡乳欲伦亚洲一区| 一本到一区二区三区| 一区二区三区四区激情| 欧美无人高清视频在线观看|