gams-math - 是否可以在集合定义(GAMS)中使用标量?
问题描述
我解决了一个模型并得到了一个我称之为“sol”的答案,我想设置“i”,使得 i={1,...,sol}。
而不是改变 . 我写了如下设置,但它没有用。
换句话说,我需要根据 sol 的值更改我的设置。
我的尝试:
scalar sol;
*after solving my model sol=objFun.val
set i /1*sol/;
有没有办法在集合定义中使用标量?
解决方案
我可以提出两个选项,因为我不知道您打算使用 set 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”,并在原始文件中使用“执行”命令调用 gams.exe 来解决新的 .gms 文件。
这些只是我的想法。如果你被推到墙上没有结果,值得一试。希望他们为你工作。
推荐阅读
- c++ - 检查 XOR 是否也适用于语句,以及 C++ 中的 OR
- pascal - 创新设置。如何用鼠标移动窗口?
- python - 如何通过单击 main 中的按钮来调用类的事件?
- java - Java 流及其优势
- excel - 选择时更改单元格填充颜色,取消选择时更改原始颜色
- ios - 根据segue设置分段控件的索引
- javascript - 带有 onclick 事件的绝对定位在 chrome 中有效,但在 firefox 中无效
- python - “TypeError:未知参数类型:
" - android-studio - Android Studio Debug 如何查看字节变量
- javascript - 使用 Javascript 从数组中读取