jobshop

把那边的搬过来试试。。

源码已经更新,地址

一些总结

使用算法:调度规则+禁忌搜索

首先是论文的参考来源
1.Algorithms for Solving Production-Scheduling Problems
Giffler & Thompson 的经典调度规则,用于生成禁忌搜索的初始解
2.基于自然启发式算法的作业车间调度问题理论与应用研究_张超勇
只用了其中的禁忌搜索部分。。

然后是一些需要改善的地方

  1. 命名规则
    包括形参的命名规则,还有局部变量,结构体中的变量。。
    下划线/小驼峰混着用。。
    应该统一一个命名规范。。

  2. 数据结构的设置
    一开始想的是用析取图来存储各个工序信息,结果发现相同机器上的各个工序之间的析取弧寻找起来太麻烦了。。
    后来就不用机器上的析取弧了,用商品的工序序列+机器上的工序序列来表示一个可行解(类似调度规则的表示法)。
    这样表示带来的一个问题就是对于每个点都要特判是否为一个商品的开头/结尾。。细节没处理好的话就会出错。。


    第二个问题是商品工序顶点和拓扑工序顶点是有一部分功能重合的,可能会有一定的空间浪费。(PS:重合就重合吧。。用着舒服。。记得复制就行)

  3. 写着写着就写晕了。。
    几乎每个函数都会出个bug。。回过来检查的时候都是很简单的错误。。
    常见错误有:

     用错变量(商品数/总工序数)  
     if-else(根据算法重新理清逻辑,判断需不需要加else)  
    
  4. 不会debug
    弱渣只会用输出debug。。不会用IDE。。以后得学一发。。

GUI部分

用的是QT
虽然没有3h就学会吧。。也学了很多东西。。。

  1. extern “C” 的使用
    C++ 和 C 的链接问题。。cpp调用c的时候都得#ifdef + extern “C”, 至于c怎么调用cpp,没学会。。
    所以就索性全都改成后缀是cpp了。。。
    当然只是这次可以这么搞。。

  2. QT的一些特性
    emmm事件槽函数还是没太懂。。就随便瞎用了。。以后有机会再理解理解吧。。

  3. 布局优化
    仔细想想整体上应该是可以用gridLayout的。。也懒得改了。。还是东西不太熟悉。。

  4. 被跳过的多线程
    貌似图形化就顺带着多线程了。。关于线程的那些函数,或者说是QT的线程也没有学。

  5. 其他一些
    环境变量冲突 - 清理系统环境变量


    release版 - windeployqt


    qt creator的debug。。用了一次也没用懂。。

目前的已知bug

不知道为什么会产生不可行的解(循环或者不连通)。。对于这些解就直接放弃,生成新的初始解。。
其实QT某个地方是有内存泄露的。。。管它呢233

全局变量满天飞

没办法。。。