如何在gecode中打印变量的值?

我想用gecode解线性方程15*x+y+0.4*z==100。我想打印x,y,z的值。 但是,当我运行下面的代码时,我想打印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作为x y z分别的值的答案。

解决方案:

你忘了为变量添加分支指令。如果没有任何分支器,执行将在传播后停止,如果没有传播器失败,则假设它已经达到了一个解决方案。

变量数组的分支器的一个简单例子是 branch(*this, x, INT_VAR_SIZE_MIN(), INT_VAL_MIN());. 关于分支机的更多信息,请参见 “分支机”。MPG.

给TA打赏
共{{data.count}}人
人已打赏
未分类

将长字符串转换为6个字母的十六进制字符串

2022-9-10 19:37:19

未分类

如何摆脱git(非快进)问题?

2022-9-10 19:37:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索