首页 > 解决方案 > 在 AMPL 中定义两个控件之间的包络

问题描述

我目前正在将以下问题(http://tomdyn.com/examples/minEnergyOrbitTransfer.html)从 PROPT 翻译为 AMPL。有两个控件,ut 和 ur。还有一个条件将两者联系在一起。此条件采用 [0<=sqrt((ur²+ut²))}<=umax] 的形式。在过去,我编写了一个与此类似但没有不等式的条件(请注意,我正在使用 Simpon 的积分)

我已经在 AMPL 的手册中搜索了与此类似的内容,但我什么也没找到,特别是在专门讨论约束的章节https://ampl.com/BOOK/CHAPTERS/11-linprog.pdf中。

也许,在附录 A https://ampl.com/BOOK/CHAPTERS/24-refman.pdf中的命令主题可以帮助我,但我不明白。

这就是我上次解决问题的方法。但是,这两个控件总是加为一个。

control_contraint{i in N}: u1[i]²=1-u2[i]²;
control_contraint_mid{i in N1}: midu1[i]²=1-midu2[i]²;

在这种情况下,我试图做类似的事情

control_constraint{i in N}: ur[i]*ur[i] >=0, <=umax*umax-ut[i]*ut[i];
control_constraint_mid{i in N1}: midur[i]*midur[i] >=0, <=umax*umax-midut[i]*midut[i];

然而,结果是语法错误。

我需要有关如何编写方程式的建议。

标签: optimizationcontrolsconstraintsampl

解决方案


最后,我可以通过将每个条件一分为二来做到这一点。

upper_control_contraint {i in N} (ut[i]^2+ur[i]^2)^(0.5)<=umax;
lower_control_constraint {i in N} (ut[i]^2+ur[i]^2)^(0.5)>=0;

中间国家也是如此。


推荐阅读