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

我正在从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}$

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国防科技大学教授:殷建平——计算机科学理论的过去、现在与未来

来源&#xff1a;图灵人工智能殷建平 教授&#xff0c;博士生导师&#xff0c;国防科学技术大学计算机系主任。研究方向有&#xff1a;模式识别与人工智能、网络算法与信息安全。享受国务院政府特殊津贴。2015年被评为“万人计划”国家级教学名师。2009年被评为“全国优秀教师”…

cmd上打开mysql_cmd连接mysql的方法

连接&#xff1a;mysql -h主机地址 -u用户名 &#xff0d;p用户密码 (注:u与root可以不用加空格&#xff0c;其它也一样)断开&#xff1a;exit (回车)创建授权&#xff1a;grant select on 数据库.* to 用户名登录主机 identified by \"密码\"修改密码&#xff1a;my…

《自然》杂志:关于人类未来的工作,有三个最紧迫的问题

来源&#xff1a;36氪 概要&#xff1a;机器学习会淘汰工人吗&#xff1f;零工经济&#xff08;Gig Economy&#xff09;会增加对工人的剥削吗&#xff1f;技能的差距能够弥补吗&#xff1f; 机器学习会淘汰工人吗&#xff1f;零工经济&#xff08;Gig Economy&#xff09;会增…

java 冒泡排序的三种写法_冒泡排序的三种实现(Java)

冒泡排序是非常好理解的&#xff0c;以从小到大排序为例&#xff0c;每一轮排序就找出未排序序列中最大值放在最后。设数组的长度为N&#xff1a;(1)比较前后相邻的二个数据&#xff0c;如果前面数据大于后面的数据&#xff0c;就将这二个数据交换。(2)这样对数组的第0个数据到…

有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业

来源&#xff1a;DeepTech深科技&#xff08;ID&#xff1a;mit-tr&#xff09; 概要&#xff1a;没有工具&#xff0c;人类就是一个脆弱的物种&#xff0c;没有任何人种可以手无寸铁面对自然。技术伴随人类成长&#xff0c;从野蛮走向文明。人类历史就是一部技术史。 人类发展…

redirect java 配置_Java从后台重定向(redirect)到另一个项目的方法

(1)通过ModelAndView跳转RequestMapping("alipayforward")public ModelAndView alipayforward(HttpServletRequest req, HttpServletResponse resp) throwsException {String contNoreq.getParameter("contNo");logger.info("访问/downloadRequestEle…

一文详解脑科学研究与产业发展方向

来源&#xff1a;神经科技、脑计划 概要&#xff1a;大脑是人体最复杂的器官&#xff0c;破译大脑运转密码、揭开生命之谜&#xff0c;是令无数科学家殚精竭虑的艰难课题。脑科学已成为21世纪最前沿的研究领域&#xff0c;尤其与信息科学进行交叉研究已成为脑科学发展的一个重要…

ef生成mysql字段注释_EFcore+MySql 数据迁移的时候,怎么给表结构加注释?

前言&#xff1a;CodeFirst运用的场景比较少&#xff0c;不代表CodeFirst不好&#xff0c;也不能和DbFirst去作比较&#xff0c;本来就是两个东西。吐槽&#xff1a;MySql.Data.EntityFrameworkCore 作为Oracle官方维护的组件&#xff0c;居然对EF很多API不支持或者无效&#x…

10秒一部电影,全球首个5G数据连接完成

作者&#xff1a;李赓 概要&#xff1a;2017年10月17日、也就是上周二&#xff0c;高通在香港高调宣布——其面向移动终端的5G调制解调器芯片组&#xff0c;骁龙X50 5G调制解调器芯片组完成了全球首个5G连接&#xff0c;同时实现了千兆级速率并在28GHz毫米波频段上的数据连接。…

idea 不打开文件提示错误_解决IDEA误删out目录下的文件导致404无法访问的问题

前言有时候IDEA下写Web项目时可能会遇到如下问题:误删out目录下的文件导致开启服务器后无法访问页面的问题新增加一个页面或添加一张图片&#xff0c;在项目编译运行后&#xff0c;未能自动更新到out\artifacts\目录下&#xff0c;从而导致页面无法访问&#xff0c;或者图片未能…

华为生态链的全方位解读

来源&#xff1a; 本翼资本CapitalWings 概要&#xff1a;华为作为目前国内ICT行业的融合性创新龙头企业&#xff0c;其多年经营探索的经营模式和宝贵经验使得其成为传统制造业转型的标杆&#xff0c;而对于新兴企业&#xff0c;能够越过坎坷的探索之路&#xff0c;直接嫁接华…

java jvm对象_Java对象在JVM中长啥样

前言Java 是门面向对象的开发语言&#xff0c;那么我们自己编写的 Java 类生成的对象是什么样的&#xff1f;它肯定保存在虚拟机的内存中&#xff0c;但它以怎样的结构来保存的呢&#xff1f;带着疑问往下看看。关于KlassJava 层的开发可能不太熟悉 Klass&#xff0c;但肯定熟悉…

洪小文:以科学的方式赤裸裸地剖析人工智能

来源&#xff1a; 微软研究院AI头条 概要&#xff1a;要想在未来实现人工智能这项“新”技术的最大化利用&#xff0c;必须清楚认识到人工智能到底是什么&#xff0c;过去我们做了什么&#xff0c;今天能做什么&#xff0c;未来又能有什么新的发展可能。 近两年来&#xff0c;人…

java ee ide 添加spring,如何在Eclipse IDE项目文件夹中为spring添加jar文件

I am going to start MVC with Spring framework, but I am unable to get jar file of spring framework .I have tried in help menu>install new software>add new in Eclipse IDE but I failed. Can anyone please guide me ?解决方案You can try download STS (Spr…

人工智能如何驱动实体经济?六大领域展望

来源&#xff1a;腾讯研究院 概要&#xff1a;科技进步正在成为推进经济发展的重要推动力&#xff0c;对中国经济发展的贡献率已经上升到56.2%。面对正在兴起的人工智能浪潮&#xff0c;如何占据行业发展制高点&#xff0c;如何促进与实体经济深度融合&#xff0c;形成新增长点…

《浪潮之巅》作者吴军最新演讲:超级人工智能

来源&#xff1a;亿欧 概要&#xff1a;10月22日&#xff0c;AMINO硅谷中国“新”大会在南京经济技术开发区举行。《浪潮之巅》作者、AMINO资本合伙人吴军发表了以《超级人工智能》为主题的演讲。 人工智能起源 我知道很多人都想听我讲人工智能是怎么回事儿&#xff1f;最近有…

mysql慢sql增加读写分离_MySQL主从同步+读写分离

MySQL主从同步读写分离实验拓扑&#xff1a;三台mysql数据库&#xff1a;192.168.80.101 主服务器 mysql192.168.80.102 从1服务器 mysql192.168.80.103 从2服务器 mysql192.168.80.104 调度器Amoeba服务器 jdk、amoeba192.168.80.105 mysql客户端 mysql第一部分&#xff1a;三…

Google公布OpenFermion:量子计算机的开源软件包

来源&#xff1a;转载自公众号「雷克世界」微信号&#xff1a;ROBO_AI 作者&#xff1a;Ryan Babbush、Jarrod McClean 编译&#xff1a;嗯~阿童木呀、多啦A亮 概要&#xff1a;OpenFermion是一个用于模拟电子&#xff08;费米子&#xff09;相互作用系统的库&#xff0c;它能够…

java 类集合_java集合类详解

一、集合类与数组的区别1.集合的长度可变&#xff0c;数组的长度固定&#xff1b;2.集合用来存放对象引用&#xff0c;数组用来存放基本类型的数据&#xff1b;二、集合类的关系1.Collection接口存储一组不唯一、无序的对象。2.List接口存储一组不唯一、有序(插入顺序)的对象。…

英特尔宣布推出“Nervana”神经网络处理器

原作者&#xff1a;Ryan Whitwam 译者&#xff1a;彭婷 概要&#xff1a;Nervana NNP就是基于这种计算设计的。这也是所谓的专用集成电路&#xff08;ASIC&#xff09;&#xff0c;所以它无法应用于一般的计算任务。 科幻小说家和现代科技大型公司一致认为AI可以开辟出一条康庄…