-
官網下載
-
實例
%% 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')