📄 suijifa_zuiyouzhenrongwenti11.m
字号:
%赋初值
value1=180;
f11=1;
f21=1;
f31=1;
f41=1;
%通过循环求解
for i=1:1000; %循环次数设为1000次
%四项成绩的和
v0=[34.6 35 34.4 34.2 35.1 35 34.6 34.1 34.5 34.4];
%每个运动员在每项比赛中的最差成绩(最悲观)
C0=[8.4 9.3 8.4 8.1 8.4 9.4 9.5 8.4 8.4 9
8.4 8.4 8.1 8.7 9 8.7 8.4 8.8 8.4 8.1
9.1 8.4 8.4 9 8.3 8.5 8.3 8.7 8.4 8.2
8.7 8.9 9.5 8.4 9.4 8.4 8.4 8.2 9.3 9.1];
C1=C0; %把C0赋值给C1,以保护C0的数据
v1=v0; %把v0赋值给v1,以保护v0的数据
%通过“随机数法”,不重复地取出C0和v0中对应的四列
f1=fix(10*rand(1,1))+1; %从1~10十个数中随机抽取一个f1
C1(:,f1)=[]; %清除C1的第f1列
val1=v1(1,f1); %将v1的第f1项数值赋给val1
v1(:,f1)=[]; %清除v1的第f1项
f2=fix(9*rand(1,1))+1; %从1~9九个数中随机抽取一个f2
C1(:,f2)=[]; %清除C1的第f2列
val2=v1(1,f2); %将v1的第f2项数值赋给val2
v1(:,f2)=[]; %清除v1的第f2项
f3=fix(8*rand(1,1))+1; %从1~8八个数中随机抽取一个f3
C1(:,f3)=[]; %清除C1的第f3列
val3=v1(1,f3); %将v1的第f3项数值赋给val3
v1(:,f3)=[]; %清除v1的第f3项
f4=fix(7*rand(1,1))+1; %从1~7七个数中随机抽取一个f4
C1(:,f4)=[]; %清除C1的第f4列
val4=v1(1,f4); %将v1的第f4项数值赋给val4
v1(:,f4)=[]; %清除v1的第f4项
C=-[C1(1,:),C1(2,:),C1(3,:),C1(4,:)]; %0-1规划中目标函数的系数阵
a1=[ones(1,6),zeros(1,18)];
a2=[zeros(1,6),ones(1,6),zeros(1,12)];
a3=[zeros(1,12),ones(1,6),zeros(1,6)];
a4=[zeros(1,18),ones(1,6)];
b1=[1,zeros(1,5),1,zeros(1,5),1,zeros(1,5),1,zeros(1,5)];
b2=[0,1,zeros(1,4),0,1,zeros(1,4),0,1,zeros(1,4),0,1,zeros(1,4)];
b3=[0,0,1,zeros(1,3),0,0,1,zeros(1,3),0,0,1,zeros(1,3),0,0,1,zeros(1,3)];
b4=[0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0];
b5=[zeros(1,4),1,0,zeros(1,4),1,0,zeros(1,4),1,0,zeros(1,4),1,0];
b6=[zeros(1,5),1,zeros(1,5),1,zeros(1,5),1,zeros(1,5),1];
A=[b1;b2;b3;b4;b5;b6]; %0-1规划中不等号限制条件的系数阵
b=[3;3;3;3;3;3]; %0-1规划中不等号限制条件的右端向量
Aeq=[a1;a2;a3;a4]; %0-1规划中等号限制条件的系数阵
beq=[2;2;2;2]; %0-1规划中等号限制条件的右端向量
[x,val]=bintprog(C,A,b,Aeq,beq); %使用matlab自带的0-1规划函数求解
value2=-val+val1+val2+val3+val4; %在本次循环中求得的总成绩值
%通过一个小的if循环将本次循环所得的总成绩值与初始总成绩值对比,
...取大的作为总成绩初值赋给value1存储,并将其对应的“取四个人”
...时产生的随机数赋值给f11,f22,f33,f44作为存储值
if value2>value1;
value1=value2;
f11=f1;
f21=f2;
f31=f3;
f41=f4;
end
end
[value1,f11,f21,f31,f41] %通过循环得到1000次选择中的最大值及其方案
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -