我尽我所能在这里搜索,虽然我发现了一些相关的问题,但我认为它们没有涵盖手头的问题:
假设一个资源和一个已知的请求列表来安排任务。每个请求都包含一个 start_after、start_by、expected_duration 和 action。
目标是尽快安排任务执行,同时将每个任务安排在 start_after 和 start_by 之间。
我编写了一个简单的 Prolog 示例,我“认为”应该可以工作,但不幸的是在运行时遇到错误:">=/2: 参数没有充分实例化"。
任何帮助或建议将不胜感激
startAfter(1,0).
startAfter(2,0).
startAfter(3,0).
startBy(1,100).
startBy(2,500).
startBy(3,300).
duration(1,199).
duration(2,199).
duration(3,199).
action(1,'noop1').
action(2,'noop2').
action(3,'noop3').
can_run(R,T) :- startAfter(R,TA),startBy(R,TB),T>=TA,T=<TB.
conflicts(T,R1,T1) :- duration(R1,D1),T=<D1+T1,T>T1.
schedule(R1,T1,R2,T2,R3,T3) :-
can_run(R1,T1),\+conflicts(T1,R2,T2),\+conflicts(T1,R3,T3),
can_run(R2,T2),\+conflicts(T2,R1,T1),\+conflicts(T2,R3,T3),
can_run(R3,T3),\+conflicts(T3,R1,T1),\+conflicts(T3,R2,T2).
% when traced I *should* see T1=0, T2=400, T3=200
编辑:冲突目标不太正确:需要额外的 T>T1 子句。
编辑:如果我提供有效的请求,时间对,显然我的日程安排目标有效......但是当给定 R1..3 时,我试图强制 Prolog 找到 T1..3 的有效值?