Я пытаюсь решить линейное уравнение 15 * x + y + 0.4 * z == 100, используя gecode. Я хочу напечатать значения x, y, z. Но когда я запускаю следующий код,
class LinearEq1 : public Space {
protected:
IntVar x;
IntVar y;
IntVar z;
public:
LinearEq1(void) :x(*this,-100,100), y(*this, -100, 100), z(*this, -100,100) {
// no leading zeros
rel(*this, x, IRT_GR, 0);
rel(*this, y, IRT_GR, 0);
rel(*this, z, IRT_GR, 0);
rel(*this, 15 * x + y + 0.4*z == 100);
}
// search support
LinearEq1(LinearEq1& s) : Space(s) {
x.update(*this, s.x);
y.update(*this, s.y);
z.update(*this, s.z);
}
virtual Space* copy(void) {
return new LinearEq1(*this);
}
// print solution
void print(void) const {
std::cout << x<<" "<<y<< " "<<z<<std::endl;
}
};
// main function
int main(int argc, char* argv[]) {
// create model and search engine
LinearEq1* m = new LinearEq1;
DFS<LinearEq1> e(m);
delete m;
// search and print all solutions
LinearEq1* s = e.next();
s->print();
return 0;
}
, я получаю вывод как [1..6] [10..85] [1..100]. Но я ожидаю одно правильное решение, такое как 1 83 5 в качестве ответа для значений xyz соответственно. Может кто-нибудь объяснить ??