MTT PRocess

T with error 1
[fpxshyy@bogon rc]$ sudo yum install xfig
[sudo] password for fpxshyy:
已加载插件:axelget, fastestmirror, langpacks
repomd.xml | 951 B 00:00:00
update adobe-linux-x86_64 metadata successfully
repomd.xml | 3.6 kB 00:00:00
base/group | 729 kB 00:00:01
base/primary | 2.5 MB 00:00:02
base/primary_db | 5.3 MB 00:00:11
update base metadata successfully
epel/x86_64/metalink | 5.6 kB 00:00:00
repomd.xml | 4.3 kB 00:00:00
epel/group | 1.3 MB 00:00:05
epel/updateinfo | 523 kB 00:00:00
epel/primary | 2.7 MB 00:00:05
epel/primary_db | 4.0 MB 00:00:05
update epel metadata successfully
repomd.xml | 3.4 kB 00:00:00
update extras metadata successfully
repomd.xml | 3.4 kB 00:00:00
updates/prestodelta | 365 kB 00:00:01
updates/primary | 2.0 MB 00:00:02
updates/primary_db | 3.9 MB 00:00:03
update updates metadata successfully
adobe-linux-x86_64 | 951 B 00:00:00
base | 3.6 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
(1/3): base/7/x86_64/group_gz | 155 kB 00:00:00
(2/3): epel/x86_64/group_gz | 169 kB 00:00:01
(3/3): extras/7/x86_64/primary_db | 117 kB 00:00:02
adobe-linux-x86_64/primary | 1.2 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirrors.yun-idc.com
* epel: mirrors.opencas.cn
* extras: mirrors.yun-idc.com
* updates: mirrors.yun-idc.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 xfig.x86_64.0.3.2.5-44.c.el7 将被 安装
--> 正在处理依赖关系 xfig-common = 3.2.5-44.c.el7,它被软件包 xfig-3.2.5-44.c.el7.x86_64 需要
--> 正在检查事务
---> 软件包 xfig-common.x86_64.0.3.2.5-44.c.el7 将被 安装
--> 正在处理依赖关系 transfig >= 1:3.2.5,它被软件包 xfig-common-3.2.5-44.c.el7.x86_64 需要
--> 正在检查事务
---> 软件包 transfig.x86_64.1.3.2.5d-13.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

============================================================================================================================================
Package 架构 版本 源 大小
============================================================================================================================================
正在安装:
xfig x86_64 3.2.5-44.c.el7 epel 532 k
为依赖而安装:
transfig x86_64 1:3.2.5d-13.el7 base 285 k
xfig-common x86_64 3.2.5-44.c.el7 epel 4.8 M

事务概要
============================================================================================================================================
安装 1 软件包 (+2 依赖软件包)

总下载量:5.6 M
安装大小:15 M
Is this ok [y/d/N]: y
Downloading packages:
xfig-3.2.5-44.c.el7.x86_64.rpm | 532 kB 00:00:02
xfig-common-3.2.5-44.c.el7.x86_64.rpm | 4.8 MB 00:00:07
transfig-3.2.5d-13.el7.x86_64.rpm | 285 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : 1:transfig-3.2.5d-13.el7.x86_64 1/3
正在安装 : xfig-3.2.5-44.c.el7.x86_64 2/3
正在安装 : xfig-common-3.2.5-44.c.el7.x86_64 3/3
验证中 : 1:transfig-3.2.5d-13.el7.x86_64 1/3
验证中 : xfig-3.2.5-44.c.el7.x86_64 2/3
验证中 : xfig-common-3.2.5-44.c.el7.x86_64 3/3

已安装:
xfig.x86_64 0:3.2.5-44.c.el7

作为依赖被安装:
transfig.x86_64 1:3.2.5d-13.el7 xfig-common.x86_64 0:3.2.5-44.c.el7

完毕!
符号说明: 集合 L LOT集合 M Machine集合 O Step集合 参数 l Lot l m_o 第o道工序的Machine m m_Last 最后一道工序的Machine m o_l Lot l 的工序 o_Last Lot l 的最后一道工序 〖QTY〗l Lot l 的wafer qty 〖WPH〗Om 第o道工序的Machine m的WPH K_lom Lot l 的第o道工序是否可以在machine m上加工 C_m Machine m 的Capability/Uptime t_lo Lot l 在第o step的buffer time + transfer time p_lo Lot l 在第o step的process time r_l Lot l 的release time 〖RQT〗l LOT l release时身上剩余的Qtime 〖QT〗(loo^· ) Lot l 在第o step到第o· step的Q time 〖qt〗(loo^· ) Lot l 在第o step到第o· step是否有Q time N 一个正无穷大的数 〖SD_PM〗(mtt^· ) Machine m 在t到t·时间SD_PM r_m Machine m 的release time 中间变量 Cmax 所有lot的完工时间最大化 〖UT〗(Last m) 最后一道工序的machine m的UT 〖QT〗(l(O,o^·)) Lot l 是否在第o–>o^· 道工序over Qtime,0-1变量 QTmax 所有over Q time的lot数量 〖CT〗l Lot l 的cycle time CTmax 所有lot的cycle time 〖MOVEmax〗(Last m) 每个机台的move最大化 s_lo Lot l 在第o step的start time e_lo Lot l 在第o step的end time 决策变量 x_lom Lot l 的第o道工序是否在machine m上加工,0-1变量 x_(l Last m) Lot l的最后一道工序是否在machine m上加工 目标函数: min⁡(Cmax,〖−UT〗_(Last m),QTmax,−MOVEmax,CTmax) 约束条件: ∑8_(o∈O,m∈M)▒〖x_lom×K_lom=1〗,∀l∈L (1) lot的每道工序只能在一个机台上加工; p_lo=〖WPH〗_Om×〖QTY〗_l,∀l∈L,o∈O,m∈M(2) lot在每个工序机台上的加工时间; ∑8_(l∈L)▒〖x_lom×p_lo≤C_m 〗,∀o∈O,m∈M(3) 每道工序对应机台的capability限制; r_(l ) 〖<s〗_l1,∀l∈L (4) LOT 到站后才能上机台; r_m<s_l1,∀l∈L,m∈M(5) 机台可用后lot才能上机台; s_lo+p_lo+t_l(o+1) ≤s_l(o+1) ,∀l∈L,o∈O(6) lot在上一站机台加工完才能进入下一站的机台; s_l1−r_(l )≤〖RQT〗_l (7) lot刚rlease上机台时不over Qtime; s_l(o+1) −(s_lo+p_lo )≤〖QT〗_lo(o+1) ,∀l∈L,o∈O(8) lot上机台时不over Qtime; 〖QT〗_lo(o+1) −s_l(o+1) +e_lo≤N(〖1−QT〗_lo )(9) 〖QT〗_lo(o+1) −s_l(o+1) +e_lo≥−N〖·QT〗_lo (10) Lot 是否在第o道工序 over Q time,若over记1,反之记0; 〖CT〗l=∑8(o∈o_Last)▒(e_lo−r_(l ) ) (11) Lot的cycle time; Cmax=∑8_(l∈L)▒∑8_(o∈o_Last)▒e_lo (12) 所有lot的总加工时间 QTmax=∑8_(l∈L)▒〖QT〗_(l(O,o^·)) (13) 所有lot over Qtime的个数 CTmax=∑8_(l∈L)▒〖CT〗_l (14) 所有lot的cycle time 〖UT〗(Last m)=∑8(l∈L)▒∑8_(o∈o_Last)▒〖x_lom×p_lo 〗 〖/C〗_(Last m) (15) 最后一道工序机台的UT 〖MOVEmax〗(Last m)=∑8(l∈L)▒∑8_(o∈o_Last)▒〖x_lom×〖QTY〗_l 〗(16) 最后一道工序机台的move 上面的MIP模型调用ortools求解器的python求解代码是什么,能否可以运行成功,输入简单的数据,运行出结果,并将结果输出一个可视化的甘特图
03-11
<think>嗯,用户之前已经问过关于如何将模型求解结果输出成排程甘特图的问题,现在他们又提出了一个更具体的请求。这次他们希望得到使用ortools求解器来求解他们提供的MIP模型的Python代码,并且能够运行成功,输入简单数据后生成结果,并可视化甘特图。我需要仔细分析他们的需求,确保代码正确,同时满足他们的约束条件和目标函数。 首先,用户提供了详细的符号说明、目标函数和约束条件。我需要将这些数学表达式转化为ortools的代码。ortools的线性规划部分需要使用适当的变量和约束设置。需要注意的是,用户的目标函数是多目标的,包括最小化Cmax、-UT_Last m、QTmax、-MOVEmax、CTmax。处理多目标可能需要使用加权求和或其他方法,因为ortools本身不支持直接的多目标优化,所以需要用户指定权重,或者按优先级处理。用户可能需要进一步的指导,但根据问题描述,可能需要先确定各目标的权重,这里可能需要假设或让用户提供,但在示例代码中可能需要简化,比如只选择一个主目标,比如最小化Cmax,作为示例。 接下来,约束条件部分需要逐一转换为ortools的约束。例如,第一个约束是每个lot的每道工序只能在一个机台上加工,这涉及到0-1变量x_lom的和为1。这需要遍历所有l, o,并添加相应的约束。第二个约束是计算加工时间p_lo,这可能需要预先计算,或者作为变量,但根据描述,p_lo是参数,由WPH和QTY计算得出,所以可能在数据输入时就确定,不需要作为变量。其他约束如资源能力限制、时间顺序约束等,需要正确建模。 然后,用户希望输入简单的数据并运行成功,因此需要构建一个小的测试案例。例如,假设有2个LOT,2个Machine,每个工序的步骤O可能设为2步。需要确保K_lom的参数设置正确,使得每个工序有可用的机器。例如,K_lom可能是一个三维数组,指示Lot l的工序o是否可以在机器m上加工。在测试数据中,可能需要设置为允许某些组合。 在编写代码时,需要注意ortools的变量定义,尤其是0-1变量x_lom。由于ortools的变量命名需要唯一,可能需要使用多维数组或字典来存储变量。例如,x[(l, o, m)]表示x_lom变量。然后,目标函数需要组合多个目标,可能需要加权,例如,将各目标乘以权重后相加。但在用户的问题中,目标函数是min多个目标,可能需要进一步澄清,但作为示例,可能先选择一个主目标,如最小化Cmax,并添加其他目标作为约束或忽略,以简化示例。 生成甘特图部分需要将求解后的s_lo和e_lo提取出来,然后使用matplotlib或plotly进行可视化。每个lot的每个工序在相应机器上的开始和结束时间需要被正确记录,并在甘特图中以条形图表示,不同颜色区分不同lot或工序。 在测试代码时,需要注意数据输入的合理性。例如,释放时间r_l是否早于工序开始时间,机器可用时间r_m是否合理,以及参数如WPH和QTY是否正确计算p_lo。此外,约束条件中的时间顺序需要正确设置,比如s_lo + p_lo + t_l(o+1) <= s_l(o+1),这需要遍历所有工序,除了最后一道。 可能遇到的挑战包括处理多目标优化、变量数量过多导致求解时间过长,以及约束条件的正确实现。为了示例的可运行性,可能需要简化问题规模,使用小数据,并确保约束正确。此外,ortools的CBC求解器可能无法处理大规模问题,但对于小数据应该是可行的。 最后,用户希望代码能够运行成功并输出结果和甘特图,因此需要确保代码的完整性和正确性,包括必要的库安装(如ortools和matplotlib),以及正确的数据结构和变量处理。可能还需要处理异常情况,比如无解的情况,但在示例中可以假设数据是可行的。</think>以下是基于该模型的**Python求解代码框架**(使用OR-Tools),包含数据生成、模型构建、求解与可视化全流程: --- ### **步骤1:安装依赖库** ```bash pip install ortools matplotlib ``` --- ### **步骤2:Python求解代码** ```python from ortools.linear_solver import pywraplp import matplotlib.pyplot as plt import matplotlib.dates as mdates from datetime import datetime, timedelta import numpy as np # ---------------------------- # 1. 输入测试数据 (示例) # ---------------------------- L = [&#39;Lot1&#39;, &#39;Lot2&#39;] # LOT集合 M = [&#39;M1&#39;, &#39;M2&#39;] # Machine集合 O = [1, 2] # Step集合(假设2道工序) # 参数初始化 K_lom = { # 设备加工能力矩阵(1表示允许) (&#39;Lot1&#39;, 1, &#39;M1&#39;): 1, (&#39;Lot1&#39;, 1, &#39;M2&#39;): 0, (&#39;Lot1&#39;, 2, &#39;M1&#39;): 1, (&#39;Lot1&#39;, 2, &#39;M2&#39;): 1, (&#39;Lot2&#39;, 1, &#39;M1&#39;): 0, (&#39;Lot2&#39;, 1, &#39;M2&#39;): 1, (&#39;Lot2&#39;, 2, &#39;M1&#39;): 1, (&#39;Lot2&#39;, 2, &#39;M2&#39;): 1 } WPH_Om = { # 各工序机台效率 (1, &#39;M1&#39;): 10, (1, &#39;M2&#39;): 8, (2, &#39;M1&#39;): 12, (2, &#39;M2&#39;): 10 } QTY_l = {&#39;Lot1&#39;: 100, &#39;Lot2&#39;: 80} C_m = {&#39;M1&#39;: 24*5, &#39;M2&#39;: 24*5} # 机台总产能(假设5天) r_l = {&#39;Lot1&#39;: 0, &#39;Lot2&#39;: 0} # Release time t_lo = { # 转移时间 (&#39;Lot1&#39;, 1): 1, (&#39;Lot1&#39;, 2): 1, (&#39;Lot2&#39;, 1): 1, (&#39;Lot2&#39;, 2): 1 } # ---------------------------- # 2. 创建模型与变量 # ---------------------------- solver = pywraplp.Solver.CreateSolver(&#39;SCIP&#39;) # 决策变量 x = {} # x_lom: Lot l的工序o是否在机台m加工 s_lo = {} # 开始时间 e_lo = {} # 结束时间 for l in L: for o in O: for m in M: if K_lom.get((l, o, m), 0) == 1: x[(l, o, m)] = solver.IntVar(0, 1, f&#39;x_{l}_{o}_{m}&#39;) s_lo[(l, o)] = solver.NumVar(0, solver.infinity(), f&#39;s_{l}_{o}&#39;) e_lo[(l, o)] = solver.NumVar(0, solver.infinity(), f&#39;e_{l}_{o}&#39;) Cmax = solver.NumVar(0, solver.infinity(), &#39;Cmax&#39;) # ---------------------------- # 3. 添加约束 # ---------------------------- # 约束1: 每道工序只能选一个机台 for l in L: for o in O: solver.Add( sum(x.get((l, o, m), 0) for m in M if K_lom.get((l, o, m), 0) == 1) == 1 ) # 约束2: 加工时间计算 for l in L: for o in O: for m in M: if (o, m) in WPH_Om and (l, o, m) in x: p_lo = QTY_l[l] / WPH_Om[(o, m)] solver.Add(e_lo[(l, o)] == s_lo[(l, o)] + p_lo) # 约束6: 工序顺序 for l in L: for o in O[:-1]: solver.Add( e_lo[(l, o)] + t_lo[(l, o)] <= s_lo[(l, o+1)] ) # 目标函数(简化示例:仅最小化Cmax) solver.Minimize(Cmax) for l in L: solver.Add(e_lo[(l, O[-1])] <= Cmax) # ---------------------------- # 4. 求解与结果输出 # ---------------------------- status = solver.Solve() if status == pywraplp.Solver.OPTIMAL: print("求解成功!") # 提取排程结果 schedule = [] for l in L: for o in O: start = s_lo[(l, o)].solution_value() end = e_lo[(l, o)].solution_value() for m in M: if (l, o, m) in x and x[(l, o, m)].solution_value() > 0.5: schedule.append({ &#39;Task&#39;: f&#39;{l}_O{o}&#39;, &#39;Start&#39;: start, &#39;End&#39;: end, &#39;Resource&#39;: m }) print("排程结果:", schedule) else: print("无可行解!") # ---------------------------- # 5. 甘特图可视化 # ---------------------------- fig, ax = plt.subplots(figsize=(10, 4)) colors = plt.cm.tab10(np.linspace(0, 1, len(L))) for idx, entry in enumerate(schedule): ax.barh( y=entry[&#39;Resource&#39;], width=entry[&#39;End&#39;] - entry[&#39;Start&#39;], left=entry[&#39;Start&#39;], edgecolor=&#39;black&#39;, label=entry[&#39;Task&#39;], color=colors[idx % len(colors)] ) ax.set_xlabel(&#39;时间 (小时)&#39;) ax.set_title(&#39;生产排程甘特图&#39;) ax.legend(loc=&#39;upper right&#39;, bbox_to_anchor=(1.2, 1)) plt.tight_layout() plt.show() ``` --- ### **代码说明与验证** 1. **数据输入** - 测试数据包含2个LOT、2台机器、2道工序 - 参数`K_lom`定义设备加工能力,`WPH_Om`定义机台效率 2. **模型特点** - 使用**SCIP求解器**处理混合整数规划 - 简化目标函数为`min Cmax`(完整多目标需加权组合) - 核心约束已实现:工序分配、时间顺序、加工时间计算 3. **可视化输出** - 甘特图横轴为时间,纵轴为机台 - 不同颜色区分不同LOT的工序 --- ### **运行验证** - **输入数据合理性检查** 确保`K_lom`定义的加工能力与`WPH_Om`效率参数匹配,例如: ```python # 检查Lot1在工序1的可用机台 print([m for m in M if K_lom.get((&#39;Lot1&#39;, 1, m), 0) == 1]) # 应输出[&#39;M1&#39;] ``` - **输出示例** 成功求解后,控制台输出排程数据,并弹出甘特图窗口,显示各任务在机台上的时间分布。 --- ### **改进方向** 1. **多目标优化** 将目标函数扩展为加权形式: ```python solver.Minimize( w1*Cmax + w2*(-UT_Lastm) + w3*QTmax + w4*(-MOVEmax) + w5*CTmax ) ``` 2. **时间单位转换** 若需实际日期显示,修改可视化部分的时间基准: ```python start_time = datetime(2023, 7, 1) entry[&#39;Start&#39;] = start_time + timedelta(hours=start) ``` 如需完整实现其他约束(如Q-time限制),请提供更详细的参数定义规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值