⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suijifa_zuiyouzhenrongwenti11.m

📁 最佳阵容问题 约束条件非常复杂 优化问题 暴力搜索
💻 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 + -