我有下面的代码,用Matlab编写,可以找到三台机组的组合MW : 1、2和3。逻辑如下:
合并单元1的总数,存储它。
合并单元2的总数,存储它。
合并单元3的总数,存储它。
合并单元1和单元2的总数,存储它。
将单元1、单元2和单元3的总数合并起来,存储它。
合并单元1和单元3的总数,存储它。
合并单元2和单元3的总数,存储它。
程序,我在做这件事,他没有:
%Max MW for each unit
maxMW = [200 60 50];
%Min MW for each unit
minMW = [50 15 15]
%Load Pattern in MW
%1-2 3-4 5-6 7-8
loadPattern = [250 320 110 75]
%Full load production cost for each unit
productionCost = [15.4 16.0062 16.800 18.060 18.900]
combination(1) = maxMW(1)
combination(2) = maxMW(2)
combination(3) = maxMW(3)
combination(4) = maxMW(1)+maxMW(2)
combination(5) = maxMW(1)+maxMW(2)+maxMW(3)
combination(6) = maxMW(2)+maxMW(3)
combination(7) = maxMW(1) + maxMW(3)有没有办法简化组合(I)块?
发布于 2014-04-27 06:22:15
如果顺序不重要,则此代码:
M=[1 2 3];
S=0;
for i=1:length(M)
S=S+nchoosek(3,i);
end
combinations=sum((arrayfun(@str2num,num2str(dec2bin(1:S))).*repmat(M,S,1))');给出如下内容:
combinations(1)=M(3)
combinations(2)=M(2)
combinations(3)=M(2)+M(3)
combinations(4)=M(1)
combinations(5)=M(1)+M(3)
combinations(6)=M(1)+M(2)
combinations(7)=M(1)+M(2)+M(3)发布于 2014-04-27 06:53:19
你也可以试试-
combination(1:3) = maxMW(nchoosek(1:3,3));
combination([4 7 6]) = sum(maxMW(nchoosek(1:3,2)),2)'; %%//'
combination(5) = sum(maxMW(nchoosek(1:3,1)))如果有人感兴趣的话,可以为更多的输入提供一个更一般的输入。
https://stackoverflow.com/questions/23319777
复制相似问题