【发布时间】:2013-03-07 18:07:18
【问题描述】:
我有一个数组 B:
B=[1 2 3; 10 20 30 ; 100 200 300 ; 1000 2000 3000]
这样
B =
1 2 3
10 20 30
100 200 300
1000 2000 3000
我正在使用以下代码来查找低于某个值(约束)的这些变量之间的可能组合——在这种情况下为 2000:
A=[123; 323; 12 ; 421]
SA=sum(A)
V=cell(length(B),1);
n=1;
for k = 1:length(B)
for idx = nchoosek(1:length(B), k)'
B_subset = B(idx);
if (SA + sum(B_subset) <= 2000)
V(n)={B_subset(:)}; %store them in a cell
n=n+1;
end
end
end
但是我没有按照我想要的方式组合它们。
目标:
从 B 中找出可能的组合与 SA 相加,使它们的总和小于 2000?
约束 1:
- 数组
B中的每一行只能一次使用一个值。
例如,这是不可接受的:[1 2 20] [2 20 30]
这是正确之一:[1 20 100] [3 200 3000]
约束 2: - 答案应仅存储在单元格 V 中的一列中(如上面代码中初始化的那样)。
该单元格的输出应该与我当前的输出类似:
V =
[ 100]
[ 300]
[ 200]
[2x1 double]
[2x1 double]
[2x1 double]
[3x1 double]
【问题讨论】:
-
V的内容可以吗?您只需要输出格式吗? -
我将用 V 的外观更新问题
-
V看起来有点眼熟 :) 将更新答案。
标签: arrays matlab constraints combinations