Skip to content

Commit 9d68221

Browse files
committed
Force root state to be equal to the root of the subtree as modeled by _zz
1 parent e837626 commit 9d68221

File tree

3 files changed

+106
-3
lines changed

3 files changed

+106
-3
lines changed

src/ilppmhctisolver.cpp

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,58 @@ void IlpPmhCtiSolver::processSolution()
110110
const int nrAnatomicalSites = _anatomicalSiteToIndex.size();
111111
const int nrSamples = _F.getNrSamples();
112112
const int nrNodes = _indexToNode.size();
113+
// const int nrArcs = _indexToArc.size();
113114

115+
// for (int ij = 0; ij < nrArcs; ++ij)
116+
// {
117+
// for (int s = 0; s < nrAnatomicalSites; ++s)
118+
// {
119+
// int size_L_s = _L[s].size();
120+
// for (int c = 0; c < size_L_s; ++c)
121+
// {
122+
// for (int t = 0; t < nrAnatomicalSites; ++t)
123+
// {
124+
// int size_L_t = _L[t].size();
125+
// for (int d = 0; d < size_L_t; ++d)
126+
// {
127+
// if (_xx[ij][s][c][t][d].get(GRB_DoubleAttr_X) >= 0.4)
128+
// {
129+
// std::cout << _xx[ij][s][c][t][d].get(GRB_StringAttr_VarName)
130+
// << " = " << _xx[ij][s][c][t][d].get(GRB_DoubleAttr_X) << std::endl;
131+
// }
132+
// }
133+
// }
134+
// }
135+
// }
136+
// }
137+
//
138+
// std::cout << std::endl;
139+
//
140+
// for (int i = 0; i < nrNodes; ++i)
141+
// {
142+
// for (int s = 0; s < nrAnatomicalSites; ++s)
143+
// {
144+
// int size_L_s = _L[s].size();
145+
// for (int c = 0; c < size_L_s; ++c)
146+
// {
147+
// for (int t = 0; t < nrAnatomicalSites; ++t)
148+
// {
149+
// int size_L_t = _L[t].size();
150+
// for (int d = 0; d < size_L_t; ++d)
151+
// {
152+
// if (_zz[i][s][c][t][d].get(GRB_DoubleAttr_X) >= 0.4)
153+
// {
154+
// std::cout << _zz[i][s][c][t][d].get(GRB_StringAttr_VarName)
155+
// << " = " << _zz[i][s][c][t][d].get(GRB_DoubleAttr_X) << std::endl;
156+
// }
157+
// }
158+
// }
159+
// }
160+
// }
161+
// }
162+
//
163+
// std::cout << std::endl;
164+
//
114165
// for (int i = 0; i < nrNodes; ++i)
115166
// {
116167
// for (int s = 0; s < nrAnatomicalSites; ++s)
@@ -572,7 +623,9 @@ void IlpPmhCtiSolver::initConstraints()
572623
// {
573624
// std::cout << i << " : " << getLabel(_indexToNode[i]) << std::endl;
574625
// }
575-
// _model.addConstr(_x[28][nrAnatomicalSites][0] == 1);
626+
// _model.addConstr(_x[21][0][0] == 1);
627+
// _model.addConstr(_x[21][2][0] == 1);
628+
// _model.addConstr(_x[21][3][0] == 1);
576629
}
577630

578631
void IlpPmhCtiSolver::initSingleSourceSeedingConstraints()

src/ilppmhprsolver.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,56 @@ void IlpPmhPrSolver::initConstraintsG()
552552
sum2.clear();
553553
}
554554

555+
for (NodeIt v_i(getTree()); v_i != lemon::INVALID; ++v_i)
556+
{
557+
if (isLeaf(v_i)) continue;
558+
const int i = (*_pNodeToIndex)[v_i];
559+
560+
for (int t = 0; t < nrAnatomicalSites; ++t)
561+
{
562+
const int size_L_t = _L[t].size();
563+
for (int d = 0; d < size_L_t; ++d)
564+
{
565+
for (int s = 0; s < nrAnatomicalSites; ++s)
566+
{
567+
const int size_L_s = _L[s].size();
568+
for (int c = 0; c < size_L_s; ++c)
569+
{
570+
sum += _zz[i][s][c][t][d];
571+
}
572+
}
573+
_model.addConstr(sum == _x[i][t][d] - _r[i][t][d]);
574+
sum.clear();
575+
}
576+
}
577+
}
578+
579+
// one arc in G
580+
for (ArcIt a_ij(getTree()); a_ij != lemon::INVALID; ++a_ij)
581+
{
582+
Node v_j = getTree().target(a_ij);
583+
if (isLeaf(v_j)) continue;
584+
const int ij = (*_pArcToIndex)[a_ij];
585+
for (int t = 0; t < nrAnatomicalSites; ++t)
586+
{
587+
const int size_L_t = _L[t].size();
588+
for (int d = 0; d < size_L_t; ++d)
589+
{
590+
for (int s = 0; s < nrAnatomicalSites; ++s)
591+
{
592+
const int size_L_s = _L[s].size();
593+
for (int c = 0; c < size_L_s; ++c)
594+
{
595+
sum += _xx[ij][s][c][t][d];
596+
}
597+
}
598+
599+
// _model.addConstr(sum <= 1);
600+
sum.clear();
601+
}
602+
}
603+
}
604+
555605
// relate _zz to _z
556606
for (NodeIt v_i(getTree()); v_i != lemon::INVALID; ++v_i)
557607
{

src/ilppmhsolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,8 @@ bool IlpPmhSolver::solve(int nrThreads, int timeLimit)
487487
else if (status == GRB_INFEASIBLE)
488488
{
489489
//std::cerr << "Model is infeasible" << std::endl;
490-
// _model.computeIIS();
491-
// _model.write("/tmp/model_IIS.ilp");
490+
_model.computeIIS();
491+
_model.write("/tmp/model_IIS.ilp");
492492
return false;
493493
}
494494
else if (status == GRB_UNBOUNDED)

0 commit comments

Comments
 (0)