这里我只列出了订购4套和5套的情况,一开始以为能弄出所有排列情况即可,但是结果是我写的排列中没有出现数字有重复的排列,类似于(1,1,2)(1,1, 3)这样的有重复数字的排列,导致计算订购5套时只得到答案时(0,2,3),未得到正确答案(1,1,3),如何在此代码上进行修改从而把有重复数字的排列加进去?
clc;clear;
A=[ 0 1 2 3 4];
A1=[0 1 2 3 4 5];
A2=[0 1 2 3 4 5 6];
B=nchoosek(A,3);
B1=nchoosek(A1,3);
B2=nchoosek(A2,3);
C=fliplr(B);
C1=fliplr(B1);
C2=fliplr(B2);
sum=[B;C];
sum1=[B1;C1];
sum2=[B2;C2];
[m,n]=size(sum);
[m1,n1]=size(sum1);
[m2,n2]=size(sum2);
blank=zeros(m,1);
blank1=zeros(m1,1);
blank2=zeros(m2,1);
%%
for i=1:m
a4=sum(i,1);
switch a4
case 0
a1=0;
case 1
a1=3;
case 2
a1=5;
case 3
a1=6;
case 4
a1=7;
end
b4=sum(i,2);
switch b4
case 0
b1=0;
case 1
b1=4;
case 2
b1=6;
case 3
b1=7;
case 4
b1=8;
end
c4=sum(i,3);
switch c4
case 0
c1=0;
case 1
c1=2;
case 2
c1=5;
case 3
c1=9;
case 4
c1=8;
end
if a4+b4+c4==4
sum11=a1+b1+c1;
blank(i,1)=sum11;
end
end
MAX=max(blank);
[q,w]=find(blank==MAX);
final=sum(q,:)
%%
for i=1:m1
a5=sum1(i,1);
switch a5
case 0
a1=0;
case 1
a1=3;
case 2
a1=5;
case 3
a1=6;
case 4
a1=7;
case 5
a1=6;
end
b5=sum1(i,2);
switch b5
case 0
b1=0;
case 1
b1=4;
case 2
b1=6;
case 3
b1=7;
case 4
b1=8;
case 5
b1=9;
end
c5=sum1(i,3);
switch c5
case 0
c1=0;
case 1
c1=2;
case 2
c1=5;
case 3
c1=9;
case 4
c1=8;
case 5
c1=8;
end
if a5+b5+c5==5
sum22=a1+b1+c1;
blank1(i,1)=sum22;
end
end
MAX1=max(blank1);
[q1,w1]=find(blank1==MAX1);
final1=sum1(q1,:)
1)当可分配设备数为4时,最终得到最优决策为(0,1,3)即1分厂不分配设备,2分厂分配1个设备,3分厂分配3个设备,得到最优解为13万元
2)当可分配设备数为5时,最终得到最优决策为(1,1,3)即1分厂分配1台设备,2分厂分配1台设备,3分厂分配3个设备,得到最优解为16万元