📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids, Buttons;
type
TForm1 = class(TForm)
Panel2: TPanel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Panel3: TPanel;
Label4: TLabel;
Label5: TLabel;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
RadioGroup1: TRadioGroup;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Panel4: TPanel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Panel1: TPanel;
Label1: TLabel;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type array2=array[1..99,1..99] of real; //声明的数组类型数据:二维数组
type array1=array[1..99] of integer; //声明的数组类型数据:一维数组
var
Form1: TForm1;
i,j,k,l,m,n,p,q:integer;
s:real;
a,b:array2; //a,b为二维数组变量
c,d:array1; //c,d为一维数组变量
implementation
{$R *.dfm}
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.text:='';
edit2.Text:='';
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
m:=strtoint(edit1.text); //m是行动方案数
n:=strtoint(edit2.text); //n是状态数
stringgrid1.colcount:=n+1; //stringgrid1控件的列数(包括固定列)
stringgrid2.RowCount:=m+1; //stringgrid2控件的行数(包括固定行)
stringgrid2.ColCount:=n+1; //stringgrid2控件的列数(包括固定列)
for j:=1 to n do
begin
stringgrid1.Cells[j,0]:='p'+inttostr(j);
stringgrid2.Cells[j,0]:='s'+inttostr(j);
end;
for i:=1 to m do
begin
stringgrid2.Cells[0,i]:='A'+inttostr(i);
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
for j:=1 to n do
begin
b[j,1]:=strtofloat(stringgrid1.Cells[j,1]); //用b[j,1]存放各状态概率
end;
for i:=1 to m do
begin
for j:=1 to n do
a[j,i]:=strtofloat(stringgrid2.cells[j,i]);
//将stringgrid2中所输入的矩阵数据即支付矩阵映射到二维熟组中
end;
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
p:=1;
q:=1;
s:=b[1,1];
c[1]:=1;
for j:=2 to n do
begin
if b[j,1]=s then
begin
c[p+1]:=j;
p:=p+1;
end;
if b[j,1]>s then
begin
s:=b[j,1];
c[1]:=j;
p:=1;
end;
end;
//q为概率为最大的状态总数(因不同状态可能同时取得最大概率)
//c[p]是各最大概率状态对应的列表
//s是最大概率值
q:=p;
edit3.Text:=' ';
for p:=1 to q do
begin
edit3.text:=edit3.Text+' '+'状态'+inttostr(c[p]);
end;
//输出最大可能状态
k:=1;
l:=1;
s:=a[c[1],1];
d[1]:=1;
if radiobutton1.checked then
begin
for p:=1 to q do
begin
for i:=1 to m do
begin
if a[c[p],i]>s then
begin
s:=a[c[p],i];
d[1]:=i;
k:=1;
end;
if a[c[p],i]=s then
begin
d[k+1]:=i;
k:=k+1;
end;
end;
//当最大可能状态确定后,找出最佳益损值s(有可能不同方案同时取得最佳)
//及其对应的方案号d[k]
end;
end;
//当决策目标是效益最大时,所求出的各项参数
if radiobutton2.checked then
begin
for p:=1 to q do
begin
for i:=1 to m do
begin
if a[c[p],i]<s then
begin
s:=a[c[p],i];
d[1]:=i;
k:=1;
end;
if a[c[p],i]=s then
begin
d[k+1]:=i;
k:=k+1;
end;
end;
end;
end;
//当决策目标是损失最小时,所求出的各项参数
l:=k;
for i:=1 to l-1 do
begin
for j:=i+1 to l do
begin
if d[i]=d[j] then d[j]:=0;
end;
end;
//去掉重复的方案号
edit5.Text:=floattostr(s); //输出最佳益损值
edit4.Text:=' ';
for k:=1 to l do
begin
if d[k]<>0 then
begin
edit4.text:=edit4.Text+' '+'方案'+inttostr(d[k]);
end;
end;
//输出最佳方案
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -