From f7f83793c2d3f8f37b49bf1eab04f08f8118797e Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Wed, 21 Nov 2012 02:10:41 +1100 Subject: Bug fixes for stupid things. --- impl/Operator.hpp | 42 ++++++++++++------------------------------ impl/VariableAssignment.hpp | 22 ++++++++++++---------- 2 files changed, 24 insertions(+), 40 deletions(-) (limited to 'impl') diff --git a/impl/Operator.hpp b/impl/Operator.hpp index 0b08866..d16152e 100644 --- a/impl/Operator.hpp +++ b/impl/Operator.hpp @@ -171,14 +171,20 @@ struct MinCostFlow : public Operator { _solver.ChgCost(i, costs[i].template as()); } _solver.SolveMCF(); - if (_solver.MCFGetStatus() == MCFClass::kUnfeasible){ + + if (_solver.MCFGetStatus() != MCFClass::kOK) { return -infinity(); - } else if (_solver.MCFGetFO() == MCFClass::Inf()) { - return infinity(); - } else if (_solver.MCFGetFO() == -MCFClass::Inf()) { - return -infinity(); } else { - return _solver.MCFGetFO(); + MCFClass::FONumber num = _solver.MCFGetFO(); + if (num == MCFClass::Inf()) { + return infinity(); + } else if (num == -MCFClass::Inf()) { + return -infinity(); + } else { + if (((int)num) == -2147483648) + return -infinity(); + return num; + } } } void print(std::ostream& cout) const { @@ -217,30 +223,6 @@ private: mutable MCFSimplex _solver; }; -/*#include "TemplateConstraintMatrix.hpp" - -template -struct MinimumCostFlow : public Operator { - MinimumCostFlow() { - } - Domain solve(const Domain& d) const { - - } - virtual Domain eval(const std::vector& arguments) const { - if (arguments.size() != 1) - throw "Incorrect number of arguments."; - return solve(arguments[0]); - } - void print(std::ostream& cout) const { - cout << "minCostFlow"; - } -private: - TemplateConstraintMatrix& constraint; // T - std::vector guard; // c - std::vector> multiplication; //A - unsigned int row; -};*/ - template std::ostream& operator<<(std::ostream& cout, const Operator& op) { op.print(cout); diff --git a/impl/VariableAssignment.hpp b/impl/VariableAssignment.hpp index 08002b8..67896ef 100644 --- a/impl/VariableAssignment.hpp +++ b/impl/VariableAssignment.hpp @@ -60,15 +60,17 @@ struct DynamicVariableAssignment : public VariableAssignment { IdSet > get_changed() { IdSet > changed; - for (typename IdSet >::iterator - it = _touched.begin(), - ei = _touched.end(); - it != ei; - ++it) { - Variable& var = _system.variable(*it); - if (!_unstable.contains(var) && _old_values[var] != _values[var]) { - changed.insert(var); - _touched.remove(var); + if (_touched.size() > 0) { + for (typename IdSet >::iterator + it = _touched.begin(), + ei = _touched.end(); + it != ei; + ++it) { + Variable& var = _system.variable(*it); + if (!_unstable.contains(var) && _old_values[var] != _values[var]) { + changed.insert(var); + _touched.remove(var); + } } } //_touched.clear(); @@ -88,7 +90,6 @@ private: const DynamicMaxStrategy& const_strat = _strategy; DependencyAssignment assignment(*this, x); Domain val = _system[x]->eval(assignment, const_strat); - stack_depth--; if (val != _values[x]) { log::fixpoint << x << " = " << val << std::endl; @@ -108,6 +109,7 @@ private: log::fixpoint << indent() << x << " did not change: " << x << " = " << val << std::endl; } + stack_depth--; } else { log::fixpoint << indent() << x << " is stable: " << x << " = " << _values[x] << std::endl; -- cgit v1.2.3