# [gecode-users] dynamic cost calculation

```Hello,

I've a problem solved with gecode where jobs must be assigned to person.
Each (job, person) has it own cost statically given. The implementation
looks like :
// --------------------------------------------------------------
_j(*this, _nb_jobs, 0, _nb_persons - 1)

int _cost[] =
{
9,  2,  7,  8,
6,  4,  3,  7,
5,  8,  1,  8,
7,  6,  9,  4,
};

IntArgs cost(_nb_persons*_nb_jobs, _cost);
distinct(*this, _j);

for (int i = 0 ; i < _nb_jobs ; ++i)
{
C << expr(*this, element(cost_m.col(i), _j[i]));
}
_total_cost = expr(*this, sum(C));
JobBrancher::post(*this, _j);
// --------------------------------------------------------------

The problem is that the _cost must be precomputed. To enable a dynamic
cost computation (and to prepare futher improvement),
i've modified the code this way  :

// --------------------------------------------------------------
_cost(*this, _nb_persons, 0, 10)  // a IntVarArray
JobBrancher::post(*this, _j, _cost, _nb_jobs, _nb_persons);
// --------------------------------------------------------------

And :
1) compute dynamically the cost in JobBrancher::choice
2) call me_failed(_costs_views[choice._person].eq(home, choice._cost))
In JobBrancher::commit (for job/person affectation)
3) call me_failed(_jobs_views[choice._job].eq(home, choice._person))
In JobBrancher::commit (to compute the _total_cost)

The problem is that solution can be found without having an
assigned cost. This produce a Int::ValOfUnassignedVar as stated
in MPG.

I've tried to set all unassigned cost in JobBrancher::commit
(not only the one corresponding to the choice person/job)
just to make a try but it doesn't work :

// --------------------------------------------------------------
for(int i = 0 ; i < choice._costs.size() ; ++i)
{
const JobChoice::Info & elem = choice._costs[i];
const int p = elem.person;
const int c = elem.cost;

if (! _costs_views[p].assigned())
{
has_failed = me_failed(_costs_views[p].eq(home, c));
if (has_failed)
{
return Gecode::ES_FAILED;
}
}
}

return Gecode::ES_OK;
// --------------------------------------------------------------

The first affectation seems to works. After that, i see under gist
that the first branch is infinitely explored without any change.
Can someone explain me what i'm doing wrong and how to correct it ?

Thanks
Philippe.

```
```
_______________________________________________
Gecode users mailing list
users@gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
```