Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Choco中搜索时创建/发布和删除/取消发布约束_Java_Constraints_Planning_Choco - Fatal编程技术网

Java 如何在Choco中搜索时创建/发布和删除/取消发布约束

Java 如何在Choco中搜索时创建/发布和删除/取消发布约束,java,constraints,planning,choco,Java,Constraints,Planning,Choco,我在Choco solver中有一个项目,但我对搜索过程中的外部影响有一个问题 我有一张规划图,上面有(比方说)层层组织的布尔瓦和分配给各层的持续时间,这意味着有些动作开始,有些动作结束。变量选择从计划结束到计划开始是静态的(层中操作的选择是任意的) 我正在研究一种使用单纯形算法来帮助分配持续时间的解决方案,比如在动作a的开始和结束之间,我们需要一个等于N的持续时间。在这两者之间还有一些约束 附加约束是基于布尔值的实例化创建的,但是它们是在外部矩阵中组织的,因此当添加动作A的结束动作时,实际上会

我在Choco solver中有一个项目,但我对搜索过程中的外部影响有一个问题

我有一张规划图,上面有(比方说)层层组织的布尔瓦和分配给各层的持续时间,这意味着有些动作开始,有些动作结束。变量选择从计划结束到计划开始是静态的(层中操作的选择是任意的)

我正在研究一种使用单纯形算法来帮助分配持续时间的解决方案,比如在动作a的开始和结束之间,我们需要一个等于N的持续时间。在这两者之间还有一些约束

附加约束是基于布尔值的实例化创建的,但是它们是在外部矩阵中组织的,因此当添加动作A的结束动作时,实际上会向矩阵中添加一个附加行,并重新设置当前约束。回溯时,我们希望以相反的方式修改矩阵,即删除行并取消约束


有没有办法在Choco中实现这种复杂行为?

如果布尔值设置为true,您是否提前知道会触发什么约束?如果是,请使用具体化(在开始时创建约束,但将它们与布尔值关联,而不是发布它们)


有关Choco Solver的专业支持,您可以联系

很遗憾,具体化无法解决此问题。我通过我的模型广泛地使用它,但这是不同的。它会在实例化时触发一个外部操作,并在回溯时触发一个反向操作。1)您应该能够使用solver.\u post(false,c)动态创建和发布约束,以便在回溯时将其删除(请参阅javadoc)。2) 您还可以使用IOOperation触发自定义操作(如将按钮涂成红色,并在回溯时将其恢复为绿色):-执行您必须执行的操作(例如将stuf涂成红色)-执行环境。保存(新IOOperation(参考中的颜色))。。。你可以用lamda。。。该代码将在回溯时调用,在您的情况下,您将添加/删除行而不是着色,我只是想表明您实际上可以做任何事情。我明白了吗?:-)