Gecode/r troubles with constraints definition in a CSP

Hi,
i’m trying the Gecoder-with-gecode library, to solve some CSP problems.

The problem is: given a int_matrix (with domain 0…1),

   sched = int_var_matrix(3, 15,0..1)

place 0 and 1’s in order to respect the following constraints:

  1. the sum of each column’s value must be 1:

    sched.column_size.times do |j|
    col=sched.column(j).to_a
    sumc=int_var
    sumc=col.inject{|sum,x| sum+x}
    sumc.must==1
    end
    
  2. the sum of each row’s value must be equal to a given array content:

    times=[3,4,3] # the array
    
    sched.row_size.times do |i|
    ro=sched.row(i).to_a
    sumr=int_var
    sumr=ro.inject{|sum,y| sum+y}
    sumr.must==times[i]
    end
    

The 1) and 2) work well, but when i put the 3rd:

  1. each row, the first “1” from left, must be positioned after a
    specific index, contained in an array

    starts=[7,3,0] # the array

    sched.row_size.times do |w|
    ro=sched.row(w).to_a
    sumg=int_var
    sumg=ro.index(1) {|i| puts i}
    sumg.must >= starts
    end

if i keep just the 1) and 2) and do:

  branch_on matricione
  solve!

i obtain a solution, but when i put the 3), it appears the following
error:
method_missing': undefined methodmust’ for nil:NilClass
(NoMethodError)
from scheduling.rb:55

This is strange, because the 3) is very similar to the other ones!!
Anyone can help me please?
Thanks
Saverio

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs