Google Optimization Tools实现加工车间任务规划【Python版】
上一篇介绍了《使用.NET Core与Google Optimization Tools实现加工车间任务规划》,这次将Google官方文档python实现的版本的完整源码献出来,以满足喜爱python的朋友。
from __future__ import print_function# Import Python wrapper for or-tools constraint solver. from ortools.constraint_solver import pywrapcpdef main():# Create the solver.solver = pywrapcp.Solver('jobshop')machines_count = 3jobs_count = 3all_machines = range(0, machines_count)all_jobs = range(0, jobs_count)# Define data.machines = [[0, 1, 2],[0, 2, 1],[1, 2]]processing_times = [[3, 2, 2],[2, 1, 4],[4, 3]]# Computes horizon.horizon = 0for i in all_jobs:horizon += sum(processing_times[i])# Creates jobs.all_tasks = {}for i in all_jobs:for j in range(0, len(machines[i])):all_tasks[(i, j)] = solver.FixedDurationIntervalVar(0,horizon,processing_times[i][j],False,'Job_%i_%i' % (i, j))# Creates sequence variables and add disjunctive constraints.all_sequences = []all_machines_jobs = []for i in all_machines:machines_jobs = []for j in all_jobs:for k in range(0, len(machines[j])):if machines[j][k] == i:machines_jobs.append(all_tasks[(j, k)])disj = solver.DisjunctiveConstraint(machines_jobs, 'machine %i' % i)all_sequences.append(disj.SequenceVar())solver.Add(disj)# Add conjunctive contraints.for i in all_jobs:for j in range(0, len(machines[i]) - 1):solver.Add(all_tasks[(i, j + 1)].StartsAfterEnd(all_tasks[(i, j)]))# Set the objective.obj_var = solver.Max([all_tasks[(i, len(machines[i])-1)].EndExpr()for i in all_jobs])objective_monitor = solver.Minimize(obj_var, 1)# Create search phases.sequence_phase = solver.Phase([all_sequences[i] for i in all_machines],solver.SEQUENCE_DEFAULT)vars_phase = solver.Phase([obj_var],solver.CHOOSE_FIRST_UNBOUND,solver.ASSIGN_MIN_VALUE)main_phase = solver.Compose([sequence_phase, vars_phase])# Create the solution collector.collector = solver.LastSolutionCollector()# Add the interesting variables to the SolutionCollector. collector.Add(all_sequences)collector.AddObjective(obj_var)for i in all_machines:sequence = all_sequences[i];sequence_count = sequence.Size();for j in range(0, sequence_count):t = sequence.Interval(j)collector.Add(t.StartExpr().Var())collector.Add(t.EndExpr().Var())# Solve the problem.disp_col_width = 10if solver.Solve(main_phase, [objective_monitor, collector]):print("\nOptimal Schedule Length:", collector.ObjectiveValue(0), "\n")sol_line = ""sol_line_tasks = ""print("Optimal Schedule", "\n")for i in all_machines:seq = all_sequences[i]sol_line += "Machine " + str(i) + ": "sol_line_tasks += "Machine " + str(i) + ": "sequence = collector.ForwardSequence(0, seq)seq_size = len(sequence)for j in range(0, seq_size):t = seq.Interval(sequence[j]);# Add spaces to output to align columns.sol_line_tasks += t.Name() + " " * (disp_col_width - len(t.Name()))for j in range(0, seq_size):t = seq.Interval(sequence[j]);sol_tmp = "[" + str(collector.Value(0, t.StartExpr().Var())) + ","sol_tmp += str(collector.Value(0, t.EndExpr().Var())) + "] "# Add spaces to output to align columns.sol_line += sol_tmp + " " * (disp_col_width - len(sol_tmp))sol_line += "\n"sol_line_tasks += "\n"print(sol_line_tasks)print("Time Intervals for Tasks\n")print(sol_line)if __name__ == '__main__':main()
转载于:https://www.cnblogs.com/BeanHsiang/p/9038796.html
Google Optimization Tools实现加工车间任务规划【Python版】相关推荐
- 使用.NET Core与Google Optimization Tools实现加工车间任务规划
前一篇文章<使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling>算是一种针对内容的规划,而针对时间顺序任务规划,加工车间的工活儿 ...
- Google Optimization Tools介绍
Google Optimization Tools(OR-Tools)是一款专门快速而便携地解决组合优化问题的套件.它包含了: 约束编程求解器. 简单而统一的接口,用于多种线性规划和混合整数规划求解, ...
- 使用.Net Core与Google Optimization Tools实现员工排班计划Scheduling
上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.Net ...
- OR-Tools|带你了解谷歌开源优化工具(Google Optimization Tools)
转眼间暑假已经过去一大半了,大家有没有度过一个充实的假期呢?小编这两天可忙了,boss突然说发现了一个很有趣的开源求解器:OR-Tools.经过一番了解,小编发现它对于为解决优化问题而烦恼的小伙伴真的 ...
- GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍
相信很多人都对GEE已经比较熟悉了(只是不熟悉GEE的Python的API而已),这里只是做一个简单的总结概括一下GEE相关内容. 1.GEE学习基本要求 目前市面上无论出现什么新的技术,总会出现一种 ...
- Google Webmaster Tools 结构化数据标记使用入门指南
要想使自己的产品在Google搜索结果有一个好的排名,我们不仅可以在提高Google搜索排名上下功夫,也可以改善我们的产品在Google搜索结果页的结构化数据样式,这样就能够以更准确.更具吸引力的方式 ...
- Google Perf Tools安装以及使用
Google Performance Tools安装以及使用 这边文章都记录在github:https://github.com/NIGHTFIGHTING/gperftools-tutorial 一 ...
- Google earth engine的python版安装:GEEMAP
目录 动机 一.正文 Ubuntu需要多加的几行代码 二.结语 动机 最近项目需要,所以在原来培训的基础上,进一步接触Google earth engine.目前主要使用者,基于JavaScript, ...
- Google 推出的 web 输入法工具 Google input tools
这又是一个Google 推出的超牛的服务,随处使用您的词汇和语言,支持各项 Google 服务.Chrome 浏览器.Android 设备和 Windows.Google真的是在下一盘很大的棋, 以后 ...
最新文章
- stdthread(2)创建
- 数据查询语言(DQL)
- 【项目管理】敏捷原则
- 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)
- 详解ifconfig命令
- 文都计算机统考讲义,考研计算机文都基础班讲义.doc
- 男人动心的3种傻女孩[转载]
- 每日算法系列【LeetCode 829】连续整数求和
- leetcode—7.同向双指针—快慢指针题型python解答
- python深度学习图像处理CSV文件分类标签图片到各个文件夹
- MongoDB 表设计
- 修改macOS中鼠标滚轮方向
- 编译go版本的supervisord
- 【AAAI 2021】全部接受论文列表(四)
- 猿创征文|我的技术成长之路C++
- Showwindow及参数介绍
- Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
- 树的基本概念及表示方法
- [RL robotic 环境] - [Robosuite](1)
- VMware安装windows server2008R2x64
热门文章
- OTG(usb2.0)强制Host调试全记录
- EasyRecovery15数据恢复软件相关使用教程
- 树莓派安装Samba服务构建家庭NAS
- 超便捷mail163手机邮箱登录方法
- 适于用阿克曼底盘的基于动力学约束的混合A*算法源码
- Android manifest文件中的标签详细介绍
- Windows10连不上网报错代码
- 2018python教程百度云盘_『求老2018男孩Python最新全栈开发全套视频教程』python开发 百度云教程...
- 浅析Genesis公链
- 明川和治功现在正说牛家沟那个“母老虎”的事