双层优化入门(2)—基于yalmip的双层优化求解(附matlab代码)

简介: ​上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法,这篇博客将介绍使用yalmip的双层优化问题的求解方法。1.KKT函数通过调用yalmip工具箱中的KKT函数,可以直接求出优化问题的KKT条件,省去自己手动写的步骤。2.solvebilevel函数solvebilevel是yalmip工具箱内置的求解双层优化问题的函数。也就是通过这个函数,不需要咱手动写KKT条件,也不需要使用KKT函数,直接把上、下层优化的目标函数、约束条件往里面一放,就能求出结果。​

         上一篇博客介绍了双层优化的基本原理和使用KKT条件求解双层优化的方法,这篇博客将介绍使用yalmip的双层优化问题的求解方法。

1.KKT函数

       通过调用yalmip工具箱中的KKT函数,可以直接求出优化问题的KKT条件,省去自己手动写的步骤,函数用法如下:

[KKTsystem, details] = kkt(Constraint,Objective,z)

image.gif

       其中z表示优化变量,KKTsystem存储KKT条件的约束表达式,details是一个结构体变量,用于存储KKT条件的细节。以上一篇博客中双层优化问题的下层优化问题为例:


matlab代码:

%% 目标函数和约束条件
x=sdpvar(1);
y=sdpvar(1);
Constraints=[-3*x+y <= -3 , 3*x+y <= 30];
objective=-y;
[KKTsystem, details] = kkt(Constraints,objective,x);

image.gif

运行结果:

image.gif


       将下层优化的KKT条件作为约束添加到上层优化中,就可以求出这个双层优化的结果:

%% 清空
clc
clear
close all
warning off
%% 目标函数和约束条件
x=sdpvar(1);
y=sdpvar(1);
Constraints_down=[-3*x+y <= -3 , 3*x+y <= 30];
objective_down=-y;
[KKTsystem , details] = kkt(Constraints_down,objective_down,x);
Constraints_up=[2*x-3*y >= -12 , x+y <= 14];
objective_up=-x-2*y;
ops=sdpsettings('verbose', 0 , 'solver', 'gurobi');
result=optimize([KKTsystem,Constraints_up,boundingbox([Constraints_up,Constraints_down])],objective_up,ops);
%% 输出模型
saveampl(KKTsystem,objective_down,'KKT_model');
%% 输出结果
disp(['最优解:x=',num2str(value(x)),',y=',num2str(value(y))])
disp(['最优函数值=',num2str(value(objective_up))])

image.gif

       求解的结果如下:

image.gif

       和上一篇博客手动写KKT的求解结果一致。

       上面的例子是一个简单的线性双层优化问题,yalmip官方文档中给出了使用KKT函数求解非线性双层优化的例子。这个双层优化问题如下:

image.gif

一样可以用KKT函数求解,代码如下(这是官网提供的代码):

sdpvar x1 x2 y1 y2 y3
OO = -8*x1-4*x2+4*y1-40*y2-4*y3;
OO = OO+OO^2;
CO = [x1>=0, x2>=0];
OI = (x1+2*x2+y1+y2+2*y3)^2;
CI = [[y1 y2 y3] >= 0,
       -y1+y2+y3 <= 10,
      2*x1-y1+2*y2-0.5*y3 <= 10,
      2*x2+2*y1-y2-0.5*y3 <= 9.7];
[K,details] = kkt(CI,OI,[x1 x2])
optimize([K,CO,boundingbox([CI,CO]),details.dual<=100],OO)

image.gif

求解结果为:

最优目标函数为-0.25

x1=0.0625,x2=0,y1=0,y2=0,y3=0。

2.solvebilevel函数

       solvebilevel是yalmip工具箱内置的求解双层优化问题的函数。也就是通过这个函数,不需要咱手动写KKT条件,也不需要使用KKT函数,直接把上、下层优化的目标函数、约束条件往里面一放,就能求出结果。

       代码如下:

%% 清空
clc
clear
close all
warning off
%% 目标函数和约束条件
x=sdpvar(1);
y=sdpvar(1);
Constraints_down=[-3*x+y <= -3 , 3*x+y <= 30];
objective_down=-y;
Constraints_up=[2*x-3*y >= -12 , x+y <= 14];
objective_up=-x-2*y;
solvebilevel(Constraints_up,objective_up,Constraints_down,objective_down,y)
%% 输出结果
disp(['最优解:x=',num2str(value(x)),',y=',num2str(value(y))])
disp(['最优函数值=',num2str(value(objective_up))])

image.gif

求解结果如下:

image.gif

        和上篇博客手动写KKT条件,这篇博客利用KKT函数求解的结果都是一样的,确实比较省事。但也要注意,这个函数只适用于规模较小的问题,如果问题规模比较大,还是需要自己手动进行双层问题的求解。

完整代码可以从这里获取:

双层优化入门(2)-基于yalmip的双层优化求解

参考资料均来源于yalmip官方文档:

[1]KKT函数的用法介绍

[2]双层优化的求解

[3]双层优化求解的备用方法

[4]solvebilevel函数用法介绍

相关文章
|
18天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
23天前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
基于ACO蚁群优化的VRPSD问题求解MATLAB仿真,输出ACO优化的收敛曲线、规划路径结果及每条路径的满载率。在MATLAB2022a版本中运行,展示了优化过程和最终路径规划结果。核心程序通过迭代搜索最优路径,更新信息素矩阵,确保找到满足客户需求且总行程成本最小的车辆调度方案。
|
29天前
|
人工智能 算法 数据安全/隐私保护
基于遗传优化的SVD水印嵌入提取算法matlab仿真
该算法基于遗传优化的SVD水印嵌入与提取技术,通过遗传算法优化水印嵌入参数,提高水印的鲁棒性和隐蔽性。在MATLAB2022a环境下测试,展示了优化前后的性能对比及不同干扰下的水印提取效果。核心程序实现了SVD分解、遗传算法流程及其参数优化,有效提升了水印技术的应用价值。
|
1月前
|
机器学习/深度学习 算法 调度
基于ACO蚁群优化的VRPSD问题求解matlab仿真,输出规划路径结果和满载率
该程序基于ACO蚁群优化算法解决VRPSD问题,使用MATLAB2022a实现,输出优化收敛曲线及路径规划结果。ACO通过模拟蚂蚁寻找食物的行为,利用信息素和启发式信息指导搜索,有效求解带时间窗约束的车辆路径问题,最小化总行程成本。
|
30天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
1月前
|
算法
基于粒子群算法的分布式电源配电网重构优化matlab仿真
本研究利用粒子群算法(PSO)优化分布式电源配电网重构,通过Matlab仿真验证优化效果,对比重构前后的节点电压、网损、负荷均衡度、电压偏离及线路传输功率,并记录开关状态变化。PSO算法通过迭代更新粒子位置寻找最优解,旨在最小化网络损耗并提升供电可靠性。仿真结果显示优化后各项指标均有显著改善。
|
1月前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
1月前
|
算法 数据挖掘
基于粒子群优化算法的图象聚类识别matlab仿真
该程序基于粒子群优化(PSO)算法实现图像聚类识别,能识别0~9的数字图片。在MATLAB2017B环境下运行,通过特征提取、PSO优化找到最佳聚类中心,提高识别准确性。PSO模拟鸟群捕食行为,通过粒子间的协作优化搜索过程。程序包括图片读取、特征提取、聚类分析及结果展示等步骤,实现了高效的图像识别。

热门文章

最新文章

下一篇
无影云桌面