
isuperaps架构和设计

1 主资源和副资源

  主资源简单的说就是某道工序在什么机器或生产线上生产，一般来说，一台机器可以用于生产多个产品，但一个产品也可以在多个机器上生产，比如车间有自动化生产线，半自动化生产线，都可以用来生产某个产品

  如果好几类机器都可以加工某道工序，这就涉及到多主资源的选择，一般的企业对多主资源的选择有自己的要求，比如尽量使用半自动机器，安排不下再使用自动机器或相反，或者不管安排到那类机器，只要完成时间最短，或者本着成本最低的原则安排机器，这就叫做主资源选择策略，aps在排程时选择主资源时，就要按照选择策略来


  把工序任务在主资源的可用时间段上排下去，并且不能违反前后工序之间的连接关系，是aps软件的基本功能，但即使是这个基本功能，也涉及到工序任务是否可以中断的问题，比如一个工序任务需要2小时，车间12点休息，下午1点再开工，如果该工序任务11点安排下去，必然会在执行到12点时中断，到下午1点再继续生产，大多数生产类型都可以允许这种中断，但也有某些产品的加工不允许中断，因此，要实现这个最基本的功能也会使算法变的复杂

  很多产品的生产不但需要主资源，同时也需要配套的模具和工具，这就是副资源的概念，一个企业，模具和工具的数量是有限，一但某个时间段已经模具和工具都已经被使用，其他需要该模具和工具的工序就不能安排在该时间段，即使在主资源上该时间段是空闲的

  副资源还带来了一个切换时间的问题，如果一台机器上的前道工序使用了模具1，后道工序需要使用模具2，那么就要把模具1卸下，换上模具2,这就会产生切换时间

2 工序之间的关系

  工序，最常见的前工序做完安排后工序，这叫做es

  es 10分钟，就是前工序结束10分钟后才能开始后一道工序

  同理，ss 10分钟，是前工序开始10分钟后才能开始后一道工序

  还有比较复杂的一些连接关系，比如ssee

  这些时间都是指多少时间之后，叫最小时间间隔，还有一种关系，是多少时间之内，叫最大时间间隔， 最大时间间隔是工序中最复杂的一种连接关系，它的意思是，前工序做完10分钟内一定要开始后工序，如果现在在可以加工下道工序的主资源上找不到10分钟内可用的空闲时间段，那怎么办，所以实现最大时间间隔需要极度复杂的算法


  如果工序之间的关系是并行工序，如果客户要求工序必要时要分割，前一道工序分割成3道工序了，那么后工序该怎么安排，分割还是不分割，这前后的关系，并行的关系，如果工序还要考虑到加工零件的特殊规格问题，这就形成及其复杂的工序连接关系，这种及其复杂的工序连接关系是无法用数学公式来表达的，所以，运筹学方法对于生产排程问题是不适用的

  现在的运筹学方法，对于最简单的连接关系，10工序10订单的生产环境，就已经无法在有限的时间内得出比较好的结果，而实际生产环境中，100工序1000订单也是很常见的

3 主资源的工作日历

 
  aps中的工作日历是比较复杂的

  1 每个主资源都要分配一个工作日历，日历里有班别，数量，节假日休息，可用时间段等设置

  2 工作日历里，每天都有班别，而且要考虑到每天的班别有可能是不同的
  比如 周一 上午 8.00-12。00 下午 1.00-5.00 晚上 6.00-10.00
         周二 上午 8.00-12.00  下午 1.00-5.00 晚上 6.00-8.00
         .. 周五 上午 8.00-12.00  下午 1.00-5.00  晚上无

  3 是把相同能力的主资源作为一个整体考虑还是按单台分别考虑

   如按整体看，该主资源每个班别可用的数量可能不同，比如上午 下午都是6台可用，晚上只有3台可用
  4 休息日 节假日放假和加班的处理 

  5 副资源要不要考虑工作日历，有些副资源是不用考虑工作日历的，但有些就要考虑工作日历

  6 副资源和主资源的搭配问题，这种搭配是由生产的零件决定的，在复杂的情况下，一万个零件就有一万个搭配，而每种搭配至少涉及一个主资源和若干个种类和数量的副资源

  灵活的使用工作日历，可以解决许多生产中的问题，比如某机器要检修，就将该机器的未来检修时间段设为休息，这样，该机器检修时间段就不会安排生产计划


4 重排的实现难点

  提供紧急插单 和 生产变动 带来的生产排产计划的快速调整的能力,是 aps软件的基本功能,排产软件解决的是动态的问题,只能提供静态生产计划的软件是没有任何价值

  解决紧急插单和生产调整的方法，简单的说，就是重排(Rescheduling)

  常说的重排也叫做动态排程，计划在执行的过程中会出现执行和计划不一致，就要重排，把排下去的生产计划中的还没有执行的部分重排，以适应各种情况，比如来了紧急的要先完成的新订单，或机器出了故障，该机器安排的计划要放到其他机器去完成

  重排的关键是要排出一个可执行的计划，但对于什么是可执行的计划，每个企业的要求是不一样的，有的企业要求同一类产品排在一起，不能一下生产a,  然后调整生产b,  然后又生产a,而是先把a都生产了，再生产b，有的企业要求一天的生产都放在一个连续的时间段，不能中断，因为它的机器一开就不能停

  所以从这个意义上说，任何aps软件都是演示版，要在企业用起来必须针对企业的生产实际做算法定制，除非是很小的企业可以直接用

  重排的难点在于，它并不简单的等同于插单，这是因为

  1 因为未来已安排计划里的空闲时间段有可能都很琐碎，你根本插不进去，最后插单其实就是排在了最后

  2 另一种可能呢，你把单插进未来已安排计划的空闲时间段里，结果插进去后，导致机器要频繁调整来生产不同的零件，使得原本未来已安排的可执行的计划变的不可执行

  3 真正的计划调整，就是要把未来的计划和新接的订单全部放在一起考虑重新安排一个优化的可用计划，而不是在未来已安排计划里找空闲时间段插来插去的
  
  但未来已安排的计划涉及的订单已经执行了一部分，只有未执行的部分要重新安排，这比安排一个新订单要复杂多了

5 重叠工序生产为什么不需要

  

  在传统的生产管理模式中，重叠工序经常被提及，比如对于工序a-工序b的生产模式，工序a 在机器1生产，工序b 在机器2生产，工序a的批量是100件，现在生产工序a1000件，那么重叠生产并不是工序a生产完1000件后再安排工序b的生产，而是工序a生产了100件后，就安排工序b的生产，这样能够节约生产时间

  重叠工序的生产安排要想达到预期的效果，对生产环境有严格的要求，比如工序b的批量必须也是100，工序b 的生产速度必须和工序a一致，不然工序b还在生产，工序a的第二个100件就到了，生产就持续不下去

  
  现在的问题是，即使满足了这些严格的条件，采取重叠工序的生产模式是不是就节约生产时间呢

  答案是否定的，对于只有一个订单的生产，是可以节约生产时间，但是如果现在有上百个订单在安排生产，工序a生产完100件后，在工序b 的机器上找不到可以立即安排生产的时间段，于是工序b 的生产要延迟到以后，这样，重叠工序生产的时间节约就无从谈起

  如果工序a生产了100件,到了休息时间，工序b必然不能接着生产，整个生产过程就打乱了


  从实际生产人员的角度来看，他们希望的是一天中一种产品都安排在一起生产，而不是100个，100个的来安排
  
  重叠工序的生产安排会导致生产计划碎片化和复杂化，而在实际生产环境下，对于生产时间的节约是很难达到预期的要求的，因此，对于有优化功能的aps软件来说，没有必要采取重叠工序的生产安排


 6 特殊规格的处理

  特殊规格也叫特性 特征或属性，常见的有颜色 大小 款式 规格等，产品的特殊规格带了了生产的复杂性，比如一个产品1有红 蓝两种颜色，都可以在机器1上生产，但生产了红色再生产蓝色就需要更换工具和配料，这就产生了切换时间，因此，对车间生产来说，希望这种切换越少越好

  减少由于特殊规格不同带来的生产切换，需要的是一种全局的优化，也就是说，在一台机器或一个时间段上的做到了最小切换时间，可能会带来其他机器或以后时间段更多的切换

  另外，插单也会导致切换的产生，如果在两个都是生产红色产品1的时间段之间有一个空闲的时间段，我们在这个时间段中插入一个生产蓝色的生产安排，表面看起来生产安排的很满，但实际这样插单就会产生两次切换，这样的生产安排是无法进行的，也就是说，出于实际生产可行性的考虑，这个空闲时间段不能用于插入生产蓝色产品1的生产安排

  最小化切换时间是aps软件中一个非常重要的优化目标（其他的有最小完工时间，最小逾期订单数等），这需要一种全局优化算法才能有效的实现，而遗传算法是最好的全局优化算法，这也是为什么遗传算法是公认的生产排程最好算法的原因

7 工艺路线 ppm 和 可替换工艺子路线
 
  工艺路线表明了产品是如何生产的，bom表明了产品的物料组成，这两种资料对于aps的生产排程都是需要的，aps 通过ppm（产品生产模型）把工艺路线和bom合二为一，在定义了每道工序的同时，也定义了该工序需要的投入物料和产出物料，以及比例，同时也可以定义工序之间的逻辑关系es ss 等

  ppm模型同时也产生了工序之间的一种潜在的并行关系，也就是说，对于处于同一层次的工序，只要没有逻辑关系的定义，本质上它们之间的关系就是并行的，排程中考虑工序之间的并行关系是复杂的，但可以极大的缩短完工时间

  ppm 同时也定义了每道工序的所有可用生产主资源和在该生产主资源上的生产时间，比如工序1可以在机器1，机器b,机器c上安排生产，那就需要分别定义工序1在机器a,机器b和机器c上的生产时间和参数，这样在实际排程中，aps软件可以根据主资源选择策略和可用时间段决定究竟把工序1安排在那台机器上生产

  ppm在定义了每道工序的所有可用生产主资源的同时，还同时定义了该主资源的限制后资源，也就是说，如果定义了机器a的限制后资源是机器1，机器2，机器b的限制后资源是机器2，机器3，那么如果该工序安排在机器a生产了，下道工序就必须安排在机器1或机器2上，如果安排在机器b生产了，下道工序就必须安排在机器2或机器3上

  ppm同时还可以定义替换工艺子路线，也就是该产品 半产品的某个生产步骤可以使用主工艺子路线1,也可以使用替换工艺子路线2

  只有满足一定的条件才会使用替换工艺子路线安排生产，最常见的是数量条件，比如产品加工数量100件以下使用工艺子路线1，加工数量100件以上时使用工艺子路线2，第二个常见条件是规格，比如产品1大时使用工艺子路线1，小号时使用工艺子路线2，第三个是工单性质，正常生产使用工艺子路线1，返工使用工艺子路线2


8 生产时间和生产数量的计算

   工序的生产时间的计算公式为

   生产时间=移动时间+设置时间+生产时间+清理时间

   其中移动时间是指从上道工艺的机器转移到生产下道工艺的机器需要的时间，如果上道工序和下道工序生产在不同的车间 ，转移时间是必须考虑的，设置时间是指生产本道工序需要安装的模具，工具，改变机器配置需要的时间，如果机器的前道工序和后道工序的生产涉及到产品的改变，产品特性的改变，就需要比较长的设置时间

   设置时间=产品改变的切换时间+产品特性改变的切换时间+副资源改变的切换时间，尽可能的减少排程中的切换时间是aps的一个重要的优化目标，要减少切换时间，就要尽可能把相同产品的生产工序安排在一起，相同产品特性的生产工序安排在一起，使用相同副资源的生产工序安排在一起，但只考虑局部的优化却往往带来整体的最不优化，需要的是全局优化算法

   移动时间和移动距离的长短有关，设置时间和清理时间一般是固定值，生产时间和生产的数量相关，当然了，也可以提供参数，来选择是否是固定值还是和生产数量有关

   生产数量的产生要考虑到机器的生产批量，如果该工序按bom分解要生产180件，而该机器的生产批量是100件，那么实际生产数量就必须是机器生产批量的倍数，200件
 
   如果某道工序的生产使用了炉资源，炉资源有个容量的定义，比如一个炉资源可以容纳200个零件，某个工序需要生产120个，那么生产数量就是120个，同时注意，该炉资源同时还有80个的容量余额可以安排，因此。炉资源排程时要同时考虑可用时间段和可用容量余额


9 销售订单 生产工单 原料需求 和 pegging

  对于面向订单的企业来说，aps提供了从销售订单到生产工单到原料采购单的一一对应跟踪，但有些企业采取的是面向库存 组装装配等生产模式，往往先产生一个半成品大量生产的工单，再根据需要进行产成品的生产，就不能在一开始进行一一跟踪，而要采取 动态pegging的设计

  在产生生产工单的时候，首先要计算原料需求，以保证工单开工时，必须的原料已经满足，假设现在生产需要原料1，原料1从供应商1 处采购 ，批量为500个

  原料需求的计算有两种方法，一种是汇总计算和集中采购，也就是把未来一个时期生产所需的原料短缺汇总，然后在现在集中采购，比如计算得出原料1工短缺 6000个，那么现在就向供应商1 发出一个6000个单位的原料1 采购订单

  另一种方法是高度复杂的，是在生产计划产生的过程中动态的计算原料短缺，比如经过计算第3天缺原料1 1000件，第6天缺原料1 2000件，第10天缺原料1 2500件 ，第16天缺原料 500个，那么就产生4个采购订单，分别在第1天发出1000 件的原料1采购订单，第4天发出2000 件的原料1采购订单，第8天发出2500件的原料1采购订单，第14天发出500件的原料1采购订单

  第一种算法是很实用，但第二种复杂的算法对某些类型的企业也是需要的


10 分布式计算架构的设计

   众所周知，遗传算法具有天然并行性，但为了充分利用遗传算法的这个特点，也需要精心的设计

   计算机的并行计算能力来自两个方面，由多cpu核提供的多核并行计算能力，大型和超级计算机就是这样，另一种是由多计算机提供的多机并行计算能力，aps的遗传算法一般不在大型和超级计算机上运行（当然，如果需要，这是完全可以的），而是在pc服务器上运行，多台pc服务器可以构成一个计算集群，同时，每台服务器一般也有多个cpu

   aps的分布式计算架构一般由一个agent和多个server端组成

   agent在一台主服务器上启动，其它服务器上运行server端，叫从服务器，从服务器上的server端启动时，自动向主服务器登记自己和自己的cpu数量，当agent接受到一个排程任务时，它将向某个有cpu空闲的server发出任务，server接到任务后，将启动一个线程来运行该任务，同时将自己可用的cpu能 力 减 少

  agent可以启动所有的server的所有cpu来运行一个排程任务，也可以将一个排程任务只由一个server的一个cpu来运行，这样的话，aps 计算集群可以同时为集团企业的多个子公司提供排程计算能力，当然，也可以设计一种灵活的server选择策略和任务分配策略

  agent除了管理计算集群外，还接受每个服务器在运行过程中得到的当前最好结果，然后作为新的迭代值传给其他服务器，在这个最好结果的基础上继续进行演化，以获得更好的结果，一般说来，由于服务器的强大cpu能力，现在在很短时间内得到的结果，是以前认为根本无法在有限时间内得到的
