2014-09-28 95 views
-1

在Matlab中,我需要找到一个矢量的所有可能的组合,满足一些我发现非常不规则的约束。matlab - 找到所有可能的矢量满足不规则约束

的载体,x,有12项:x_0,x_1,...,x_11

局部约束:

x_0 in {1,...,6} 

x_i in {0,...,6}, i = 1,...,6 

x_j in {0,...,12-j}, j = 7,...,11 

全局约束:

sum(x) = 12 

for any k, x_k = y ==> x_{k+j} = 0 for j = 1,...,y-1 

我已经想了很长一段时间,现在和可似乎没有解决它自己 - 任何想法任何人?

+0

介绍优化:http://www.mathworks.com/products/optimization/ – lakesh 2014-09-28 15:27:17

+0

lakesh你有什么想法,可以查明我推向更具体的东西吗?我已经使用了matlab多年,但在我看来,这比标准情况更棘手 – tach 2014-09-28 15:35:02

回答

0

使用递归和中间约束检查。像这样的伎俩:

function dispConstraintSatisfyingVectors() 

global lb ub sumVal 

lb = [1 0 0 0 0 0 0 0 0 0 0 0]; 
ub = [6 6 6 6 6 6 6 5 4 3 2 1]; 
sumVal = 12; 

x = zeros(1,12); 
addValueRecursive(x,1); 

end 

function addValueRecursive(x,idx) 

global lb ub sumVal 

for val = lb(idx):ub(idx) 
    x(idx) = val; 
    if checkZerosConstraint(x) == 0 && sum(x) <= sumVal 
     if idx < 12 
      addValueRecursive(x,idx+1); 
     else 
      if sum(x) == sumVal 
       disp(num2str(x)) 
      end 
     end 
    end 
end 

end 

function c = checkZerosConstraint(x) 

c = 0; 
for j=1:11 
    c = c + sum(x(j+1:j+x(j)-1)); 
end 

end