上一篇介绍了《使用.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版】相关推荐

  1. 使用.NET Core与Google Optimization Tools实现加工车间任务规划

    前一篇文章<使用.NET Core与Google Optimization Tools实现员工排班计划Scheduling>算是一种针对内容的规划,而针对时间顺序任务规划,加工车间的工活儿 ...

  2. Google Optimization Tools介绍

    Google Optimization Tools(OR-Tools)是一款专门快速而便携地解决组合优化问题的套件.它包含了: 约束编程求解器. 简单而统一的接口,用于多种线性规划和混合整数规划求解, ...

  3. 使用.Net Core与Google Optimization Tools实现员工排班计划Scheduling

    上一篇说完<Google Optimization Tools介绍>,让大家初步了解了Google Optimization Tools是一款约束求解(CP)的高效套件.那么我们用.Net ...

  4. OR-Tools|带你了解谷歌开源优化工具(Google Optimization Tools)

    转眼间暑假已经过去一大半了,大家有没有度过一个充实的假期呢?小编这两天可忙了,boss突然说发现了一个很有趣的开源求解器:OR-Tools.经过一番了解,小编发现它对于为解决优化问题而烦恼的小伙伴真的 ...

  5. GEE学习笔记 六十七:【GEE之Python版教程一】GEE学习背景介绍

    相信很多人都对GEE已经比较熟悉了(只是不熟悉GEE的Python的API而已),这里只是做一个简单的总结概括一下GEE相关内容. 1.GEE学习基本要求 目前市面上无论出现什么新的技术,总会出现一种 ...

  6. Google Webmaster Tools 结构化数据标记使用入门指南

    要想使自己的产品在Google搜索结果有一个好的排名,我们不仅可以在提高Google搜索排名上下功夫,也可以改善我们的产品在Google搜索结果页的结构化数据样式,这样就能够以更准确.更具吸引力的方式 ...

  7. Google Perf Tools安装以及使用

    Google Performance Tools安装以及使用 这边文章都记录在github:https://github.com/NIGHTFIGHTING/gperftools-tutorial 一 ...

  8. Google earth engine的python版安装:GEEMAP

    目录 动机 一.正文 Ubuntu需要多加的几行代码 二.结语 动机 最近项目需要,所以在原来培训的基础上,进一步接触Google earth engine.目前主要使用者,基于JavaScript, ...

  9. Google 推出的 web 输入法工具 Google input tools

    这又是一个Google 推出的超牛的服务,随处使用您的词汇和语言,支持各项 Google 服务.Chrome 浏览器.Android 设备和 Windows.Google真的是在下一盘很大的棋, 以后 ...

最新文章

  1. stdthread(2)创建
  2. 数据查询语言(DQL)
  3. 【项目管理】敏捷原则
  4. 迪杰斯特拉--- 模板(求最短路径/输出路径/所有路径都可以走的做法)
  5. 详解ifconfig命令
  6. 文都计算机统考讲义,考研计算机文都基础班讲义.doc
  7. 男人动心的3种傻女孩[转载]
  8. 每日算法系列【LeetCode 829】连续整数求和
  9. leetcode—7.同向双指针—快慢指针题型python解答
  10. python深度学习图像处理CSV文件分类标签图片到各个文件夹
  11. MongoDB 表设计
  12. 修改macOS中鼠标滚轮方向
  13. 编译go版本的supervisord
  14. 【AAAI 2021】全部接受论文列表(四)
  15. 猿创征文|我的技术成长之路C++
  16. Showwindow及参数介绍
  17. Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
  18. 树的基本概念及表示方法
  19. [RL robotic 环境] - [Robosuite](1)
  20. VMware安装windows server2008R2x64

热门文章

  1. OTG(usb2.0)强制Host调试全记录
  2. EasyRecovery15数据恢复软件相关使用教程
  3. 树莓派安装Samba服务构建家庭NAS
  4. 超便捷mail163手机邮箱登录方法
  5. 适于用阿克曼底盘的基于动力学约束的混合A*算法源码
  6. Android manifest文件中的标签详细介绍
  7. Windows10连不上网报错代码
  8. 2018python教程百度云盘_『求老2018男孩Python最新全栈开发全套视频教程』python开发 百度云教程...
  9. 浅析Genesis公链
  10. 明川和治功现在正说牛家沟那个“母老虎”的事