计算调度问题中的雇用天数

2024-06-07

在调度问题中,我还想最小化总雇用天数。

如果雇员在该天之前和该天之后工作,则该雇员在该天被雇用。

这是一个小工作示例:

import random
from ortools.sat.python import cp_model

model = cp_model.CpModel()
solver = cp_model.CpSolver()

employees = range(3)
days = range(10)

works_day = {(e, d): model.NewBoolVar(f'{e}_works_{d}')
             for e in employees for d in days}
hired_day = {(e, d): model.NewBoolVar(f'{e}_employed_{d}')
             for e in employees for d in days}

# random example
for boolean in works_day.values():
    model.Add(boolean == random.choice([0, 1]))

# give value to hired_day
add_hired_days()

# solve
print('Variables:', len(model.Proto().variables))
print('Constraints:', len(model.Proto().constraints))
status = solver.Solve(model)

for e in employees:
    print()
    print('Employee', e)
    for d in days:
        print('Works', solver.Value(works_day[e, d]),
              'Hired', solver.Value(hired_day[e, d]))

Where add_hired_days is:

def add_hired_days():
    for idx, d in enumerate(days):
        for e in employees:
            model.AddImplication(works_day[e, d], hired_day[e, d])
            previous = [works_day[e, d] for d in days[:idx + 1]]
            following = [works_day[e, d] for d in days[idx:]]

            # too many variables
            works_previous = model.NewBoolVar('')
            works_following = model.NewBoolVar('')

            model.AddBoolOr(previous).OnlyEnforceIf(works_previous)
            model.AddBoolAnd([d.Not() for d in previous
                              ]).OnlyEnforceIf(works_previous.Not())

            model.AddBoolOr(following).OnlyEnforceIf(works_following)
            model.AddBoolAnd([d.Not() for d in following
                              ]).OnlyEnforceIf(works_following.Not())

            model.AddBoolAnd([works_previous, works_following
                              ]).OnlyEnforceIf(hired_day[e, d])
            model.AddBoolOr([works_previous.Not(),
                             works_following.Not()
                             ]).OnlyEnforceIf(hired_day[e, d].Not())

有没有办法在不创建这么多变量和约束的情况下做到这一点?


如果一名员工一个月工作 n 天,则需要雇用 n - 2 次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算调度问题中的雇用天数 的相关文章

随机推荐

  • 确定显示的视图是被推送还是来自导航栏中的后退按钮

    有没有办法判断新控制器是来自导航后退按钮还是被推入堆栈 我只想重新加载数据以推送导航堆栈 而不是按下后退按钮 从 iOS 5 0 开始 您可以执行以下操作 void viewWillAppear BOOL animated super vi
  • 使用Python获取CPU温度?

    如何使用 Python 检索 CPU 的温度 假设我在Linux上 有一个较新的 sysfs 热区 API http shallowsky com blog linux kernel sysfs thermal zone html 也可以看
  • 无法在 Sequelize 迁移中执行原始查询

    我正在尝试使用 Sequelize 迁移更新我的数据库 因此我尝试编写这样的 Sequelize 迁移 use strict module exports up queryInterface Sequelize migration gt q
  • MVVMLight - 如何获取视图中ViewModel的引用?

    我正在构建一个 Windows Phone 7 应用程序 并且需要在视图中引用 ViewModel 以便可以从事件处理程序设置属性 唯一的问题是我无法获得该参考 我做了什么 我有一个 ViewModelLocator 删除了不相关的位 st
  • Android 中的振动器

    如何创建Vibrator对象并调用vibrate函数 http developer android com reference android os Vibrator html http developer android com refe
  • Rust 中类似结构的重复代码删除

    我有一个小项目 其中有一些类似的结构 其中的实现Ord and PartialOrd是一样的 我是 主要 动态语言的新手 其中代码重复通常被认为是反模式 我想知道是否有办法避免重复此代码 或者 更一般地说 这是我应该担心 Rust 的问题吗
  • 可以启动auth参数

    本文档引用了传递给已启动活动的身份验证令牌参数 https github com RusticiSoftware launch blob master lms lrs md https github com RusticiSoftware
  • 从子文件夹运行的 Node.js 服务器

    所以我参加 Node js 聚会已经很晚了 主要是没人邀请我 Thanks 也就是说 我开始解决这个问题 我有 ASP 经典背景 所以有一些东西我还没有理解 如果有人能指出我正确的方向 那就太好了 提前致谢 因此 我正在以标准方式设置服务器
  • 如何立即开始执行 Kotlin 协程

    我想立即启动一个协程 我有一段代码 class SampleActivity AppCompatActivity CoroutineScope private var job Job Job override val coroutineCo
  • .Net Core Nuget Package - 将文件复制到包消费者 wwwroot

    我有一个 Net Core 2 2 库项目 该项目包含的所有内容都是一堆静态文件 其中 构建操作 设置为内容 该项目的唯一目的是构建到 Nuget 包中 并让任何消费者将包含的内容添加到他们的wwwroot folder 不幸的是 当查看解
  • 向父进程发出信号,表明子进程已完全初始化

    我正在启动一个公开 WCF 端点的子进程 如何从子进程向父进程发出信号 表明子进程已完全初始化并且现在可以访问端点 我曾考虑过使用信号量来实现此目的 但不太清楚如何实现所需的信号 string pipeUri net pipe localh
  • 如何跟踪此对象图深度优先搜索算法中的深度?

    我有这段代码 它迭代一棵树 进行深度优先搜索 每个元素都只处理一次 非常好 void iterateOverTree TreeNode node NSMutableArray elements NSMutableArray array el
  • iPad Safari 移动版似乎忽略了 html5 视频元素的 z 索引位置

    我在页面上有一个视频元素 该元素在 Safari 移动版和桌面版中都运行良好 我有一个半透明的下拉菜单 工作正常 问题是 当菜单位于视频元素上方时 在桌面 safari 上我可以在菜单下看到视频 根据需要 而在移动版本上 无论我说什么 视频
  • 在 Java Servlet 中上传文件

    我有一个 Java 动态 Web 项目 并且正在使用 TomCat v7 0 我是 Web 项目的新手 不太明白如何在我的 jsp 页面之一中上传文件 由于我的项目只是本地的 所以我认为我可以使用多部分形式 其中人们可以选择文件 并且这部分
  • Flutter 扩展方法不起作用,它显示“未定义的类”和“需要扩展方法语言功能”

    我正在慢慢建立我的个人网站dlblack dev http dlblack dev 我正在尝试让它变得更有趣一点 例如 在计算机 而不是平板电脑或手机 因为它们没有鼠标指针 上 如果您将鼠标悬停在任何可单击项目上 它不会更改您的鼠标指针以指
  • 我可以提高当前模态视图控制器的动画速度吗?

    我正在编写一个绘图应用程序 当用户单击工具栏中的项目时 该应用程序会显示工具视图控制器 然而 我的几位 Beta 测试人员报告说 工具面板打开速度太慢 我使用标准的 presentModalViewController animated 调
  • 用于 Mysql 查询的 FLASK HTML 字段

    你好 Stackoverflow 社区 我是 FLASK 的新手 但是虽然学习曲线非常陡峭 但有一个项目我无法理解 我使用一个非常简单的 HTML 搜索表单 用户在其中输入城市名称 此输入将传递到 Mysql 查询并将输出返回到表中 一切正
  • 禁用 Azure 应用程序服务(Web 应用程序)上的应用程序见解的依赖项日志记录

    我的应用程序写入大量日志 ib 依赖项 这导致它非常昂贵 甚至比我的服务器场 数据库更昂贵 而且我们已经好几个月没有使用它了 如何禁用依赖项但保留其余部分 请求 异常 自定义事件等 在文档中 添加应用程序洞察并没有与添加依赖项分开 http
  • 交叉表的动态 MySQL 查询/视图

    我目前有一个带有以下 sql 的硬编码视图 select username case user role role id when 1 then true else false end as ROLE SUPER case user rol
  • 计算调度问题中的雇用天数

    在调度问题中 我还想最小化总雇用天数 如果雇员在该天之前和该天之后工作 则该雇员在该天被雇用 这是一个小工作示例 import random from ortools sat python import cp model model cp