官网下载
实例
%% yalmip 求解 yalmip
clc;clear;close all;
%%
%sdpvar实型变量 intvar 整形变量 binvar 0-1型变量
p=sdpvar(3,1); %定义变量
%目标函数 要把求最大值转化为最小值
Objective=-p(1)^2+p(2)^2-p(2)*p(3);
%约束条件
Constraints=[0<=p<=1,(p(1)^2+p(1)*p(2)+p(2)*p(3)<=p(2)+6),((2*p(1)+p(2)+3*p(3))<=6)];
%优化求解
optimize(Constraints,Objective)
P=double(p);
Obj=double(-Objective);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
for i=1:length(P)
xstr=['x',num2str(i),'的值为:',num2str(P(i))];
disp(xstr)
end
%% yalmip 求解
%背包问题
clc;clear;close all;
%sdpvar实型变量 intvar 整形变量 binvar 0-1型变量
%各个物品的质量
w=[80,82,85,70,72,70,82,75,78,45,49,76,45,35,94,49,76,79,84,74,76,63,...
35,26,52,12,56,78,16,52, 16,42,18,46,39,80,41,41,16,35,70,72,70,66,50,55,25, 50,55,40];
%各个物品的价值
v=[200,208,198,192,180,180,168,176,182,168,187,138,184,154,168,175,198,...
184,158,148,174,135, 126,156,123,145,164,145,134,164,134,174,102,149,134,...
156,172,164,101,154,192,180,180,165,162,160,158,155, 130,125];
%%
p=binvar(length(w),1);
%%
%目标函数
%拿出物品价值最大,默认最小值优化,加个负号
Objective=-sum(v*p);
%约束条件
%背包总重量不超过1000
Constraints=[(sum(w*p)<=1000)];
%优化求解
optimize(Constraints,Objective)
P=double(p);
Obj=double(-Objective);
disp(P')
index=find(P==1);
objstr=['目标函数最优值:',num2str(Obj)];
disp(objstr)
disp('装入背包的物品为')
disp(index')