如何在 docplex (python) 中启动区间变量边界?
How to initiate the interval variable bounds in docplex (python)?
我有以下 OPL 代码,需要在 docplex 中实现它 (python),我是该领域的新手...
using CP;
dvar interval I1 in 0..20;
dvar interval I2 in 0..20;
dvar interval I3 in 0..20;
dvar int over1;
dvar int start1;
dvar int end1;
dvar interval artificialInterval;
maximize over1;
subject to
{
over1==overlapLength(I1,I2);
start1==maxl(startOf(I1),startOf(I2));
end1==minl(endOf(I1),endOf(I2));
startOf(artificialInterval)==start1;
endOf(artificialInterval)==end1;
over1==overlapLength(I3,artificialInterval);
}
问题出现在行 startOf(artificialInterval)==start1;
和 endOf(artificialInterval)==end1;
这是我所做的:
mdl=CpoModel()
I1=mdl.interval_var(define its parameters)
I2=mdl.interval_var(define its parameters)
I3=mdl.interval_var(define its parameters)
over1=mdl.integer_var()
start1=mdl.integer_var()
end1=mdl.integer_var()
artificialInterval=mdl.interval_var()
over1=mdl.overlapLength(I1,I2)
start1=mdl.max(mdl.start_of(I1),mdl.start_of(I2))
end1=mdl.min(mdl.end_of(I1),mdl.end_of(I2))
mdl.start_of(artificialInterval) =start1
mdl.end_of(artificialInterval) =end1
over1=mdl.overlapLength(I3,artificialInterval)
obj = mdl.maximize(over1)
mdl.solve()
有了这个我有语法错误"SyntaxError: can't assign to function call"
所以我尝试使用 set_start(start1) 但我认为我也没有很好地使用它......
如有任何提示,我们将不胜感激。
谢谢,
from docplex.cp.model import CpoModel
mdl=CpoModel()
I1=mdl.interval_var(0,10)
I2=mdl.interval_var(0,10)
I3=mdl.interval_var(0,10)
over1=mdl.integer_var()
start1=mdl.integer_var()
end1=mdl.integer_var()
artificialInterval=mdl.interval_var()
mdl.add(over1==mdl.overlap_length(I1,I2))
start1=mdl.max(mdl.start_of(I1),mdl.start_of(I2))
end1=mdl.min(mdl.end_of(I1),mdl.end_of(I2))
mdl.add(mdl.start_of(artificialInterval) ==start1)
mdl.add(mdl.end_of(artificialInterval) ==end1)
mdl.add(over1==mdl.overlap_length(I3,artificialInterval))
obj = mdl.maximize(over1)
mdl.solve()
效果更好
我有以下 OPL 代码,需要在 docplex 中实现它 (python),我是该领域的新手...
using CP;
dvar interval I1 in 0..20;
dvar interval I2 in 0..20;
dvar interval I3 in 0..20;
dvar int over1;
dvar int start1;
dvar int end1;
dvar interval artificialInterval;
maximize over1;
subject to
{
over1==overlapLength(I1,I2);
start1==maxl(startOf(I1),startOf(I2));
end1==minl(endOf(I1),endOf(I2));
startOf(artificialInterval)==start1;
endOf(artificialInterval)==end1;
over1==overlapLength(I3,artificialInterval);
}
问题出现在行 startOf(artificialInterval)==start1; 和 endOf(artificialInterval)==end1;
这是我所做的:
mdl=CpoModel()
I1=mdl.interval_var(define its parameters)
I2=mdl.interval_var(define its parameters)
I3=mdl.interval_var(define its parameters)
over1=mdl.integer_var()
start1=mdl.integer_var()
end1=mdl.integer_var()
artificialInterval=mdl.interval_var()
over1=mdl.overlapLength(I1,I2)
start1=mdl.max(mdl.start_of(I1),mdl.start_of(I2))
end1=mdl.min(mdl.end_of(I1),mdl.end_of(I2))
mdl.start_of(artificialInterval) =start1
mdl.end_of(artificialInterval) =end1
over1=mdl.overlapLength(I3,artificialInterval)
obj = mdl.maximize(over1)
mdl.solve()
有了这个我有语法错误"SyntaxError: can't assign to function call" 所以我尝试使用 set_start(start1) 但我认为我也没有很好地使用它......
如有任何提示,我们将不胜感激。 谢谢,
from docplex.cp.model import CpoModel
mdl=CpoModel()
I1=mdl.interval_var(0,10)
I2=mdl.interval_var(0,10)
I3=mdl.interval_var(0,10)
over1=mdl.integer_var()
start1=mdl.integer_var()
end1=mdl.integer_var()
artificialInterval=mdl.interval_var()
mdl.add(over1==mdl.overlap_length(I1,I2))
start1=mdl.max(mdl.start_of(I1),mdl.start_of(I2))
end1=mdl.min(mdl.end_of(I1),mdl.end_of(I2))
mdl.add(mdl.start_of(artificialInterval) ==start1)
mdl.add(mdl.end_of(artificialInterval) ==end1)
mdl.add(over1==mdl.overlap_length(I3,artificialInterval))
obj = mdl.maximize(over1)
mdl.solve()
效果更好