我解决了一个模型并得到了一个我称之为“ sol”的答案 我想将'i'设置为i = {1,...,sol}。
而不是更改。我写了下面的set,但是没有用。
换句话说,我需要根据sol的值更改设置。
我的尝试:
scalar sol;
*after solving my model sol=objFun.val
set i /1*sol/;
有什么方法可以在定防御中使用标量?
答案 0 :(得分:3)
我可以提出两个选择,因为我不知道您打算将集合i用于什么:
我认为绝对没有必要:
set i /1*sol/;
相反,有:
set i /1*UB/;
其中UB是一个值>> sol,然后定义i的动态集,例如j,这样:
j(i) = no;
j(i)$(ord(i) le sol) = yes;
如果要在其他模型/求解中使用集合i,请在不同的.gms文件中写出新模型/求解,并使用put命令根据文本文件中的sol来写出新集合:
put new_set /'new_set.txt'/;
put new_set;
put 'set j /1*' sol.l:14:4 '/' /;
@Richard这将创建一个名为“ new_set.txt”的新文件,然后输入确切的单词:
"set j /1* 12345423.2345/;"
如果文件sol.l = 12345423.234486754,则实际上是新集合的定义。
“ sol”是目标函数变量。如果sol是标量,则按定义将目标函数值分配给,请删除'.l'。
“ 14”是指您在使用put实用程序时必须预先为其指定“ sol”的位数。
'4'是'sol'的小数位数。
进一步的参考:https://www.gams.com/latest/docs/UG_Put.html
在新的.gms文件中,包括“ new_set.txt”,在原始文件中,使用“ execute”命令调用gams.exe来解决新的.gms文件。
这些只是我的想法。值得一试,如果您被推到墙上没有结果。希望他们为您工作。