Matlab电力运营商在目标函数
等待用户输入嗨,社区,
对于这个简单的示例问题,我得到一个错误,说:“未定义操作符“^”“optim.problemdef.OptimizationExpression”类型的输入参数。”
概率= optimproblem (“ObjectiveSense”、“最大化”);
x = optimvar (“x”);
y = optimvar (' y ', '下界',1);
z = optimvar (' z ',下界,0);
概率。目标= test_fun ([x y z]);
prob.Constraints。cons1 = x + 2 * y + 3 * z < = 4;
prob.Constraints。cons2 = x + y > = 1;
选择= optimoptions (“linprog”);
索尔=解决(概率,选择);
函数索尔= test_fun (b)
x = b (1);
y = b (2);
z = b (3);
索尔= x + y + 2 ^ z;
结束
我为Gurobi使用Matlab的接口。我如何在我的目标设计变量作为指数函数?
谢谢!
0
-
嗨,利维亚,
模型\ (2 ^ z \)功能,必须使用Gurobi一般约束接口。在特定的情况下,您必须使用genconexpa结构体数组。没有显示这个函数但示例gc_pwl_func。米的例子显示了genconexp结构体数组的用法,它近似地工作。
最好的问候,
Jaromił0 -
嗨Jaromil,
感谢你的回复!我想我的问题适应你发送的例子。但是在我的例子中,目标函数不是一个设计变量的线性组合,它是一个相当复杂的非线性函数。
在你寄给我的例子(简化的),我怎么能改变。obj是一个设计变量作为参数的函数?
四nonneg %。变量x, y, u, v,一个线性约束u + 4 * v < = 9
m。varnames = {' x ', ' y ', ' u ', ' v '};
m。1磅= 0 (4);
m。乌兰巴托= +正(4,1);
m。一个=稀疏([0,0,1,4]);
m。rhs = 9;
%的目标
m。modelsense =“max”;
m。obj = [2;1;0;0);
%设置u \大约exp (x)
m.genconexp。xvar = 1;
m.genconexp。yvar = 3;
m.genconexp.name =“gcf1”;
%设置v \大约sqrt (y) = y ^ 0.5
m.genconpow。xvar = 2;
m.genconpow。yvar = 4;
m.genconpow。一个= 0.5;
m.genconpow.name =“gcf2”;
%参数离散化:使用相等的块长度和长度= 1 e - 3
参数个数。FuncPieces = 1;
参数个数。FuncPieceLength = 1 e - 3;
%解决和打印解决方案
结果= gurobi (m, params);
printsol(结果。result.x objval result.x (1) (2), result.x (3), result.x (4));再次感谢!
0 -
嗨,利维亚,
我不确定我是否理解你的问题。你一般约束定义约束\ (u = \ exp (x) \)和\ (v = \ sqrt {y} \)。您现在可以使用变量\ (u \)和\ (v \),例如,添加\ \ exp (x) \)和\ \√{y} \)的目标
m。obj = [0;0;1;1];
这回答你的问题吗?
最好的问候,
Jaromił0
请登录留下你的评论。
评论
3评论