编程蠢事|【Matlab+Yalmip+Gurobi】中solvebilevel的使用

最近看了很多利用solvebilevel直接求解双层优化问题的案例,但是套用到自己的问题上发现所求的结果,只考虑到了上层模型的最优,而下层模型没有考虑到。

我的问题是电网系统优化,下层模型中涉及到用户效益和用户用电量两个决策变量,我把求解的具体结果输出后发现,用户效益均为0。我现在的猜想是会不会利用solvebilevel求解双层优化问题只适用于下层模型只有一个决策变量的情况,我用这个猜想去验证,果然当我的下层模型不考虑用户效益,只决策用电量时,求解结果是正确的。

然后我看了solvebilevel的官方文档,受到一些启发,我在想同时将两个决策变量都放到solvebilevel是否可行,但因为我一开始学习的时候有见过类似的使用,在开始敲代码的时候也都放进去了但是出错了,本着结果不能再坏的心理,我又敲了一遍,就像下面这样,然后果然可以了!

solvebilevel(Construp,Obj_up,Constrdown,Obj_down,[P_Pb_it u_it])

好的,关于GurobiMATLAB使用教程,我可以为您提供一些基本的指导。 首先,您需要安装MATLABGurobi软件。Gurobi提供了一个免费的学术许可证,可以在其官方网站上申请。安装好Gurobi后,您需要将其与MATLAB连接起来。您可以通过在MATLAB命令窗口输入以下命令来测试是否成功连接: ``` gurobi_test() ``` 如果您看到一些关于Gurobi的信息,那么就说明连接成功了。 接下来,您可以使用YALMIP来建模和求解TSP问题。YALMIP是一个MATLAB工具箱,可以帮助您轻松地建模各种优化问题。以下是一个使用YALMIPGurobi求解TSP问题的示例代码: ```matlab % 生成TSP问题的数据 n = 5; % 城市数量 x = randn(n,1); y = randn(n,1); % 定义变量 u = sdpvar(n,1); v = binvar(n,n); % 定义目标函数 obj = sum(sum(v.*repmat(sqrt((x-x').^2+(y-y').^2),1,1))); % 添加约束条件 con = [sum(v,2)==1, sum(v,1)==1, u(1)==1, 2<=u<=n+1]; for i = 2:n con = [con, 2 <= u(i) <= n+1, u(i) <= u(find(v(i,:))) + (n-2)*(1-v(i,:)))]; end % 求解问题 ops = sdpsettings('solver','gurobi'); sol = optimize(con,obj,ops); % 输出结果 if sol.problem == 0 disp('Optimal solution found'); disp(value(obj)); else disp('Error'); end ``` 上述代码,我们首先生成了一个包含5个城市的TSP问题的数据,然后定义了变量和目标函数。接下来,我们添加了约束条件来确保每个城市只能被访问一次,并且每个城市都必须在一条路径出现。最后,我们使用Gurobi求解了该问题,并输出了最优解。 希望这个简单的示例可以帮助您入门GurobiMATLAB使用。如果您需要更多的帮助,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值