MathProg中是否有一种方法可以使用与整数相关的字符串来输出答案的标签?
例如,以下代码不起作用,但希望传达我正在尝试做的事情:
# attempt via set results in error, "mylabels cannot be subscripted":
set mylabels := "label1" "label2" "label3";
printf "first label: %s\n", mylabels[1];
# attempt via param results in error, "mylabels requires numeric data":
param mylabels :=
1 "label1"
2 "label2"
3 "label3";
printf "first label: %s\n", mylabels[1];
我还找到了一个discussion on the lack of ordered sets in MathProg,一个建议的黑客听起来可能对我有所帮助,但是没有用:
# attempt via ordered-set hack results in error, "no value for mylabels_ref[1]":
set mylabels := "label1" "label2" "label3";
param mylabels_ref{i in 1..card(mylabels)}, symbolic, in mylabels;
printf "first label: %s\n", mylabels_ref[1];
这显然不是什么大不了的事,因为我可以在MathProg之外进行查找(即手动或w /其他一些脚本语言);但我只是好奇,如果语法支持我想做的事情。
答案 0 :(得分:1)
迟到的答案,但这可能有助于想要进行类似查找的人。
实际工作的是什么(没有黑客攻击)是两种方法的混合。你需要一个包含你的标签的集合(因为params只能保存数值),你还需要一个用于查找的参数。
set mylabels;
param mylabels2{i in mylabels};
for {i in mylabels}{
for{{0}: mylabels2[i] = 1}
printf "\n first label: %s\n\n", i;
}
data;
set mylabels := label1 label2 label3;
param mylabels2 :=
label1 1
label2 2
label3 3;
end;
在第一个for循环中,我们只是遍历所有标签。第二个for循环是一个正在进行查找的条件。 print语句仅在标签索引的参数等于给定值时执行。