麦田

不积跬步无以至千里.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

posted on 2025-02-19 15:55  一些记录  阅读(39)  评论(0)    收藏  举报