2

我想编写谓词的自定义版本cumulative/2(或至少在功能方面类似的谓词)。我寻找了 CLP(FD) 库的来源,现在我想知道修改该库是否是一个好主意(仅通过添加新东西)以合并新的my_cumulative/2但使用库的私有谓词可以这样做.

我想添加以下功能:

  • 我希望任务计划器具有抢先性(这意味着计划的任务可以在几个时间间隔内“拆分”)。
  • 除了累积性之外,我还希望它是多资源的(这意味着[limit(3)]我可以拥有,例如,而不是[limit(2),limit(3),limit(1)]; 其中每个限制对应于不同的资源)
  • 我想为每个任务添加优先级,以便更高优先级的任务具有更大的“决策权”,并且不能被较低的任务安排。
  • 我希望解决方案“不可调度”成为任务的可能解决方案。

当我试图添加一个自定义运算符/\来计算交集(同样\/表示联合)时,我想到了这个想法,我看到实际上在 clpfd.pl 中已经定义了一个但没有成为模块的一部分。

4

2 回答 2

2

首先,您应该尝试根据导出的库谓词来表达您的约束。如果您需要使用库的私有谓词,可以使用其模块前缀(如clpfd:some_predicate(...))调用它。私有谓词可能会更改,恕不另行通知,但如果您想尝试一些东西,它们会很有用,当您发现哪些对您有用时,您可以在 SWI 邮件列表中请求更多公共谓词等。要计算与公共谓词的交集,您可以使用例如:X in 0..5 #/\ X in 0..2, fd_dom(X, Dom). 您可以(#\/)用于工会。

于 2013-06-17T14:57:49.377 回答
1

您可以定义一个新模块并在其中使用reexport/1andreexport/2指令重新导出完整的 CLP(FD) 库或只是其中的一部分。在这个新模块中,您可以添加新内容或在必要时覆盖现有内容。

于 2013-06-17T17:02:20.557 回答