我正在从here修改代码,我希望能够为某一天添加不同长度的轮班(例如,我希望星期五/第4天只有2个轮班)。我的代码总是以错误代码结尾。我相信这是由于我设定的一些限制的内部问题。在

我在类似的程序上看到了一些关于StackOverflow的帖子,但是找不到一个能解决我的具体问题的帖子。在from ortools.sat.python import cp_model

class employeePartialSolutionPrinter(cp_model.CpSolverSolutionCallback):

"""Print intermediate solutions."""

def __init__(self, shifts, num_employee, num_days, num_shifts, sols):

cp_model.CpSolverSolutionCallback.__init__(self)

self._shifts = shifts

self._num_employee = num_employee

self._num_days = num_days

self._num_shifts = num_shifts

self._solutions = set(sols)

self._solution_count = 0

def on_solution_callback(self):

self._solution_count += 1

if self._solution_count in self._solutions:

print('Solution %i' % self._solution_count)

for d in range(self._num_days):

print('Day %i' % d)

for n in range(self._num_employee):

is_working = False

for s in range(self._num_shifts):

if self.Value(self._shifts[(n, d, s)]):

is_working = True

print(' Employee %i works shift %i' % (n, s))

if not is_working:

print(' Employee {} does not work'.format(n))

def solution_count(self):

return self._solution_count

model = cp_model.CpModel()

solver = cp_model.CpSolver()

num_employee = 5

num_shifts = 5

num_days = 5

all_employee = range(num_employee)

all_shifts = range(num_shifts)

all_days = range(num_days)

# Normal Hours

# Monday-Thursday Shift 0-4

# Friday Shift 0-1

friday_deduct = 3

shifts = {}

for n in all_employee:

for d in all_days:

if d == 4:

for s in range(num_shifts-friday_deduct):

shifts[(n, d, s)] = model.NewBoolVar('shift_n%id%is%i' % (n, d, s))

else:

for s in all_shifts:

shifts[(n,d,s)] = model.NewBoolVar('shift_n%id%is%i' % (n,d,s))

"""

Constraints (Normal Time)

"""

# Each Shift is assigned to a single person per day

# Shift 2 need to be assigned to 3 person

# Shift 1 and 3 need to be assigned to 2 person

for d in all_days:

if d == 4:

for s in range(num_shifts-friday_deduct):

if s == 1:

model.Add(sum(shifts[(n, d, s)] for n in all_employee) == 2)

else:

model.Add(sum(shifts[(n, d, s)] for n in all_employee) == 1)

else:

for s in all_shifts:

if s == 2 :

model.Add(sum(shifts[(n,d,s)] for n in all_employee) == 3)

elif s == 3 or s == 1:

model.Add(sum(shifts[(n, d, s)] for n in all_employee) == 2)

else:

model.Add(sum(shifts[(n,d,s)] for n in all_employee) == 1)

#Each nurse works at most 10 shift per week, at least 4 shift per week

for n in range(num_employee):

week = []

for d in all_days:

if d == 4:

for s in range(num_shifts-friday_deduct):

week.append(shifts[(n,d,s)])

# week.append(sum(shifts[(n, d, s)] for s in range(num_shifts-friday_deduct)))

else:

for s in all_shifts:

week.append(shifts[(n,d,s)])

# week.append(sum(shifts[(n,d,s)] for s in all_shifts))

model.Add(sum(week) >= 4)

model.Add(sum(week) <=10)

solver.parameters.linearization_level = 0

a_few_solutions = range(5)

solution_printer = employeePartialSolutionPrinter(shifts, num_employee,

num_days, num_shifts, a_few_solutions)

solver.SearchForAllSolutions(model, solution_printer)

这是Pycharm IDE的打印输出。当我从命令行运行它时,会出现窗口“Python has stop working”(Python已停止工作)。在

^{pr2}$

python自动客服排班_使用或工具的护士排班问题,在某些日子增加不同的轮班时间...相关推荐

  1. python自动客服排班_python自动排班表

    from random import shuffle from random import sample import numpy as np import xlwt name_list = ['田' ...

  2. python自动收取蚂蚁森林能量_通过测试工具自动收取蚂蚁森林能量

    本文仅为自动化工具appium的技术研究,请勿用于任何非正当用途 最近在家远程工作,结果作息更混乱了,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业" ‍♂️.于 ...

  3. php 微信机器人_微信小程序机器人自动客服功能

    现在微信小程序在开发中比较流行,本文就教大家一种微信新功能:客服机器人的小程序,这个小程序也可以做其他类型的自动客服程序,在olami平台加上相应的问题和答案,就可以了. 整个小程序界面包含2个部分, ...

  4. 淘宝自动客服(旺旺机器人)

    Technorati 标签: 自动客服, 旺旺机器人, 自动回复, 淘宝客服, 机器人 可以自动回答客户的提问,可以自动学习,手动培训和维护对话数据库. 支持基于正则表达式的匹配模板,更灵活更强大. ...

  5. 自动客服功能的微信小程序

    (欢迎转载.本文源地址:http://blog.csdn.net/speeds3/article/details/77326122) 微信小程序最近比较火爆,所以抽空做了个客服机器人的小程序,来回答之 ...

  6. 自动客服回复HTML源码+立体飘落雪花动画特效HTML源码

    简介: 1.自动客服回复HTML源码(打开html文件进行修改编辑更换你需要回复的消息内容) 点击最右下角的消息图标进行访问 返回的内容需在kefu.html进行修改即可 : 2.立体飘落雪花动画特效 ...

  7. python实现千牛客服自动回复语_千牛客服自动回复话术

    淘宝千牛客服自动回复,如何设置成这种的,第一次询问时弹出这样的文字,买家想问的问题点击红字怎么进入 您如果是千牛,可以设置千牛机器人自动回复. 您截图中的提问选择方式实际意义不大,没有买家愿意这样的方 ...

  8. python 在线客服_后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统...

    在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详细介绍了websocket协议以及结合Django如何实现各种功能,本次我们 ...

  9. python 在线客服_如何利用Python实现简单全双工在线客服系统!这个有点东西!...

    在之前的一篇文章中: 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统 ,详细介绍了websocket协议以及结合Django如何实现各种功能,本次 ...

最新文章

  1. python生成指定长度的列表_python – 如何将列表或字符串解析为固定长度的块
  2. 项目2---机柜和物理服务器
  3. JQuery-- 获取元素的宽高、获取浏览器的宽高和垂直滚动距离
  4. 谈计算机知识对学生的作用,浅谈计算机在教学中的作用
  5. 【学生信息管理系统】——优化篇(一)
  6. java8 stream案例分析
  7. 一个牛人在美国的跳槽经历(有感)
  8. CentOS 7安装TigerVNC Server
  9. 正则表达式 四则运算 java_利用正则表达式判断四则运算表达式是否合法
  10. 使用Android Studio向SVN上传新项目
  11. SAP 用户出口合集
  12. mysql 05_MySQL 05
  13. Java后端开发的浪漫~情人节表白/告白代码(小白快速搭建项目)
  14. python论文用到的外文参考文献_论文外文文献怎么找?
  15. 几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
  16. java爬虫(爬取豆瓣电影排行榜)
  17. 斗鱼实时计算平台的演进
  18. java 计算年龄_Java根据日期计算年龄——精确到天
  19. 不撞南墙不回头-深度优先搜索算法
  20. LwIP应用笔记(二):无操作系统支持下的RAW API移植

热门文章

  1. 服务器 | 安装最新版R和Rstudio(3.5.3)
  2. HashSet存储自定义对象保证元素唯一性图解原理及代码优化
  3. 洛谷P1558 色板游戏
  4. Nginx 反向代理+高可用
  5. AT91SAM9260EK-38k产生原理
  6. Android调用binder实现权限提升-android学习之旅(81)
  7. 7/7 第7篇 函数名与函数指针
  8. arp病毒利用的Javascript技术
  9. 猎取人心的36条黄金法则
  10. JDBC-01-快速入门