如何使用surrogateopt时包含一个非线性等式约束

3视图(30天)
我创建一个程序,优化了一个混合整数非线性目标函数。我不确定如何使用surrogateopt实现非线性等式约束。我已通过现场编辑工具和文档,我仍然不知道如何做到这一点:(。感谢任何帮助。现在我有一个不等式约束如下所示,但我希望它是一个等式约束。
清晰;
clc;
据nvar = 3;
最后期限= 25;
upperBounds =(10、10、期限);
下界= (1 1 1);
intcon = 1:据nvar;
%解决
(解决方案,objectiveValue) = surrogateopt (@objConstrFcn下界,
upperBounds intcon);
disp(解决方案);
disp (objectiveValue);
函数f = objConstrFcn (optimInput)
%变量
填补= optimInput (1);
帽= optimInput (2);
天= optimInput (3);
%目标函数
f。Fval =天*(填充+帽);
%的约束
f。Ineq =天- optimwelders(填补,帽);%我怎么使这个等式约束吗? ?这几天= optimwelders(填充、盖)
结束
函数optimwelders:
函数时间= optimwelders(填充、盖)
时间=((填充+帽)/(帽* 3))+ 4;
结束
1评论
马特·J
马特·J 2021年5月27日
编辑:马特·J 2021年5月28日
所示的问题你并不是一个恰当的应用 surrogateopt 。只有2500个可行的解决方案。万博 尤文图斯您可以轻松地遍历所有找到的最低。

登录置评。

答案(2)

马特·J
马特·J 2021年5月27日
编辑:马特·J 2021年5月27日
你的非线性等式约束,
天=((填充+帽)/(帽* 3))+ 4;
为了这是满意,所有条款在右手边必须是整数,这意味着 填满 必须是一个整数倍数的帽子,
填补= k *帽
您现在可以重写问题的变量k,帽,和天。你的目标,
f.Fval =天* (k + 1) *帽
和非线性等式约束减少了线性约束, surrogateopt 可以接受,
天= (k + 1) / 3 + 4
界限帽和天保持不变,但边界填充,
1 < = k *帽< = 10
但这些非线性不等式 surrogateopt 也可以接受。

马特·J
马特·J 2021年5月29日
编辑:马特·J 2021年5月29日
另一个解决方案可能是重新组织您的非线性等式约束的形式,
3 *帽* (days-4) -(填充+帽)= 0
虽然 surrogateopt 不能直接处理这件事,左边总是整数值,所以你可以等同于写成两个不等式:
3 *帽* (days-4)——(填充+帽)< = 0.5
3 *帽* (days-4) -(填充+帽)> = -0.5
这将导致以下代码的修改:
函数f = objConstrFcn (optimInput)
%变量
填补= optimInput (1);
帽= optimInput (2);
天= optimInput (3);
%目标函数
f。Fval =天*(填充+帽);
%的约束
f.Ineq(1) =(3 *帽* (days-4) -(填充+帽)- 0.5);% 3 *帽* (days-4)——(填充+帽)< = 0.5
f.Ineq(2) = -(3 *帽* (days-4)——(填充+ cap) + 0.5);% 3 *帽* (days-4)——(填充+帽)> = -0.5
结束

类别

找到更多的在代理优化帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的