AddNoOverlap()
含义:是用来添加一个“无重叠”约束的方法。"无重叠"约束通常用于安排一组任务或活动在时间上不会发生重叠。这可以确保在特定时间段内,只有一个任务或活动会被安排。
using Google.OrTools.Sat; CpModel model = new CpModel(); // 任务1,开始时间为0,持续时间为2,结束时间为2 var start_1 = model.NewIntVar(0, 10, "start_1"); var duration_1 = 2; var end_1 = model.NewIntVar(0, 10, "end_1"); var interval_1 = model.NewIntervalVar(start_1, duration_1, end_1, "interval_1"); // 任务2,开始时间为0,持续时间为2,结束时间为2 var start_2 = model.NewIntVar(0, 10, "start_2"); var duration_2 = 2; var end_2 = model.NewIntVar(0, 10, "end_2"); var interval_2 = model.NewIntervalVar(start_2, duration_2, end_2, "interval_2"); // 任务3,开始时间为0,持续时间为2,结束时间为2 var start_3 = model.NewIntVar(0, 10, "start_3"); var duration_3 = 2; var end_3 = model.NewIntVar(0, 10, "end_3"); var interval_3 = model.NewIntervalVar(start_3, duration_3, end_3, "interval_3"); model.AddNoOverlap(new IntervalVar[] { interval_1, interval_2, interval_3 }); var solver = new CpSolver(); var status = solver.Solve(model); if (status == CpSolverStatus.Optimal) { Console.WriteLine("任务1开始于:" + solver.Value(start_1) + "-" + solver.Value(end_1)); Console.WriteLine("任务2开始于:" + solver.Value(start_2) + "-" + solver.Value(end_2)); Console.WriteLine("任务3开始于:" + solver.Value(start_3) + "-" + solver.Value(end_3)); } else { Console.WriteLine("找不到可行解。"); } Console.ReadKey();
输出
任务1开始于:0-2
任务2开始于:6-8
任务3开始于:4-6

浙公网安备 33010602011771号