C++ 如何在gecode中打印变量值

C++ 如何在gecode中打印变量值,c++,solver,constraint-programming,gecode,C++,Solver,Constraint Programming,Gecode,我试图用gecode解线性方程15*x+y+0.4*z==100。我想打印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 le

我试图用gecode解线性方程15*x+y+0.4*z==100。我想打印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类:公共空间{
受保护的:
IntVar x;
内在价值;
IntVar z;
公众:
Linearq1(无效):x(*此,-100100),y(*此,-100100),z(*此,-100100){
//没有前导零
rel(*这个,x,IRT_GR,0);
rel(*这个,y,IRT_GR,0);
rel(*这个,z,IRT_GR,0);
rel(*这个,15*x+y+0.4*z==100);
}
//搜索支持
linearq1(linearq1&s):空格{
x、 更新(*本,s.x);
y、 更新(*本,s.y);
z、 更新(*此,s.z);
}
虚拟空间*副本(无效){
返回新的LinearEq1(*此项);
}
//打印溶液
无效打印(无效)常量{

std::cout您忘记为变量添加分支指令。如果没有任何分支,则在传播后执行将停止,并假设如果没有传播器失败,则执行已达到解决方案


变量数组的分支的一个简单例子是
branch(*this,x,INT_VAR_SIZE_MIN(),INT_VAL_MIN())
。关于分支的更多信息可以在中找到。

难道不是一个有效的解决方案吗?(希望我没有犯错误-我在头脑中解决了。);-)事实上,你的方程15*x+y+0.4*z==100有一组解,x,y和z的允许范围定义了这个集合的大小(即使x,y,z必须是整数值)。因此,我相信如果解是一组元素,你不能期望得到一个特定的元素。为此,你必须给出更多的约束。(我必须承认,我第一次在你的Q中听说了Gecode,并阅读了文档的前几页。-出于好奇。)…但是,第19页上的示例看起来非常相似。因此,我希望(没有更深入的知识),如果你想要一个解,那么你必须为x选择一个值,调整约束resp。(例如,通过收紧x的范围)并再次求解,对y重复该操作,直到得到包含1(或0)个元素的解。也许,这就是您在上面链接的文档中所寻找的……第27页:2.5最佳解搜索。