⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 很好运筹学的DEOPHI原代码.包括动态规划,原始单纯形法,对策论,决策论等
💻 ~PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Panel2: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Panel3: TPanel;
    Label4: TLabel;
    Label5: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label6: TLabel;
    Edit4: TEdit;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type array2=array[1..99,1..99] of real;  //声明的数组类型数据:二维数组

var
  Form1: TForm1;
  i,j,k,n,s,t:integer;
  b,c:real;
  a,x,y:array2;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  n:=strtoint(edit1.Text);  //n为变量的个数.它比对策矩阵的行数(或列数)多1
  stringgrid1.RowCount:=n;
  stringgrid1.ColCount:=n;
  for i:=1 to n do
  begin
    stringgrid1.Cells[0,i]:='α'+inttostr(i);
    stringgrid1.Cells[i,0]:='β'+inttostr(i);
  end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  for i:=1 to n-1  do
  begin
    for j:=1 to n-1 do
      a[j,i]:=strtofloat(stringgrid1.cells[j,i]);
               //将stringgrid1中所输入的矩阵数据即支付矩阵数据映射到二维熟组中
  end;

  for i:=1 to n-1  do
  begin
    for j:=1 to n-1 do
    begin
      y[j,i]:=a[j,i];
      x[j,i]:=a[i,j];
    end;
  end;

  for k:=1 to n-1 do
  begin
    y[n+1,k]:=0;
    x[n+1,k]:=0;
  end;

  for k:=1 to n do
  begin
    y[n,k]:=-1;
    x[n,k]:=-1;
  end;

  for k:=1 to n+1 do
  begin
    y[k,n]:=1;
    x[k,n]:=1;
  end;

  y[n,n]:=0;
  x[n,n]:=0;
  //通过调整,得到由以y和x为变量方程组的系数增广矩阵元素所确定的数组x[]和y[]
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  for s:=1 to n do
  begin
    for t:=s to n do
    begin
      if x[s,t]<>0 then
      begin
        for j:=1 to n+1 do
        begin
          b:=x[j,s];
          x[j,s]:=x[j,t];
          x[j,t]:=b;
        end;
        //如果矩阵元素不等于0,那么首先交换第s行和第t行

        c:=1/x[s,s];
        for j:=1 to n+1 do
        begin
          x[j,s]:=x[j,s]*c;
        end;
        //将第s行的元素进行化简处理.将x[s,s]化为1,其前的元素已化为0

        for k:=1 to n do
        begin
          if k<>s then
          begin
            c:=-x[s,k];
            for j:=1 to n+1 do
            begin
              x[j,k]:=x[j,k]+x[j,s]*c;
            end;
          end;
        end;
        //用第s行的元素将其他行的元素进行高斯消元.

      end;
    end;
  end;

  edit2.Text:=' ';
  for i:=1 to n-1 do
  begin
    edit2.Text:=edit2.Text+'  '+formatfloat('0.##',(x[n+1,i]));
  end;
  //输出局中人一的对策概率向量
  //局中人一的对策向量求解至此结束,下面是对局中人二进行的向量求解

  for s:=1 to n do
    begin
    for t:=s to n do
    begin
      if y[s,t]<>0 then
      begin
        for j:=1 to n+1 do
        begin
          b:=y[j,s];
          y[j,s]:=y[j,t];
          y[j,t]:=b;
        end;

        c:=1/y[s,s];
        for j:=1 to n+1 do
        begin
          y[j,s]:=y[j,s]*c;
        end;

        for k:=1 to n do
        begin
          if k<>s then
          begin
            c:=-y[s,k];
            for j:=1 to n+1 do
            begin
              y[j,k]:=y[j,k]+y[j,s]*c;
            end;
          end;
        end;

      end;
    end;
  end;

  edit3.Text:=' ';
  for i:=1 to n-1 do
  begin
    edit3.Text:=edit3.Text+'  '+formatfloat('0.##',(y[n+1,i]));
  end;
  //输出局中人二的对策概率向量
  //局中人二的对策向量求解也已结束

  edit4.text:='   '+formatfloat('0.##',(x[n+1,n]));
  //输出对策值
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -