2014-09-28 46 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 
相關問題