我在使用 AMPL 进行随机编程时遇到问题,
目前我有三个场景,并在每个解决方案之前分配概率。
for { t in 1..SIZE-1 by 2} {
let Demand := DemandSeq[t];
let Resources := ResourcesSeq[t];
# change probability of each stage
if StateSequence[t] = 1 # N
then {
let P[1]:= 0.7;
let P[2]:= 0.2;
let P[3]:= 0.1;
}
else if StateSequence[t] = 2 # A
then {
let P[1]:= 0.6;
let P[2]:= 0.3;
let P[3]:= 0.1;
}
else if StateSequence[t] = 3 # M
then {
let P[1]:= 0.5;
let P[2]:= 0.4;
let P[3]:= 0.1;
};
solve;
...
}
现在如果我把这三个场景问题变成一个 10 个场景问题会怎样。我已经有一个 10*10 的概率矩阵,但我不知道如何分配概率。
正如我在 AMPL Google Group 上回复的那样,您可以定义一个二维参数来存储概率:
param Probs{1..10, 1..10};
以紧凑的形式在数据中定义它(或从数据库或电子表格中读取),例如:
data;
param Probs :
1 2 3 ... 10 :=
1 0.1 0.2 0.05 ... 0.1
...
并使用
let
的迭代形式将数据分配给P:
let {i in 1..10} P[i] := Prob[StateSequence[t], i];