У меня есть массив B из:Сочетание возможных значений в массиве с несколькими ограничениями в Matlab?
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' OK? Вам просто нужно форматирование вывода? –
Я обновлю вопрос с тем, как должен выглядеть V – NLed
«V» выглядит подозрительно знакомым :) Будет обновлен ответ. –