zcaicaros/L2D

关于permissibleLS.py文件的一些疑问(Some questions about permissibleLS.py)

Opened this issue · 1 comments

尊敬的作者:
您好!
我阅读了您的代码,对于permissinleLS.py中的函数,我有一些疑问,恳请您的解答:
1.mch_a = np.take(mchMat, a) - 1 这一语句的含义。在该模块中,机器数减一的语句大量出现,并且相关变量常出现在矩阵索引的位置,例如 opIDsOnMchs[mch_a][np.where(opIDsOnMchs[mch_a] >= 0)][-1]。我不太能理解其含义,在我的理解下,np.take(mchMat, a)提取了某一个action对应的机器编号,似乎和行索引没有什么关联。
2.变量opIDsOnMchs的含义。
3.对于action和Job工序中顺序约束的理解。通篇阅读后,我认为您对action的编码方式是 J * M,例如15 * 15的数据**有编号为0-224的225个action。然而permissinleLS.py测试代码的输出结果print('opIDsOnMchs\n', opIDsOnMchs) 动摇了我的理解。例如在某一次完整的迭代中最终opIDsOnMchs输出为[[3 1 8] [0 4 6] [2 5 7]],我不知道应该如何理解其中各个数字的含义,以及不知道如何从中看出Job的顺序约束。(该例子对应的机器矩阵为[[2 1 3] [1 2 3] [2 3 1]])
4.您在论文中提出“add arcs”的策略,然而在该策略下,训练过程中机器是如何判断共用同一台机器的Oij呢?在“remove arcs”策略下,使用同一台机器的Oij有析取弧相连,故只需要训练得出析取弧的方向即可;然而在“add arcs”策略下,事先没有析取弧约束,如何保证这一点呢?
恳请您拨冗回答,十分期待您的回复,感谢!

Dear author,

Hello!

I have read your code, and I have some questions about the function in permissinels. py.

1.mch_a = np.take(mchMat, a) -1 Meaning of this statement. In this module(permissinleLS.py), the number of machines reduced by one statement appears a lot, and the related variables often appear in the position of matrix index, such as opIDsOnMchs[mch_a][np-where (opIDsOnMchs[mch_a] >= 0)][-1]. I don't quite understand its meaning. In my understanding, np.take(mchMat, a) extracts the machine number corresponding to an action, which seems to have nothing to do with the row index.

  1. The meaning of variable opIDsOnMchs.

  2. Understanding of sequence constraints in action and Job processes. After reading the whole article, I think you encode the action as J * M. For example, there are 225 actions numbered 0-224 in the data of 15 * 15. However, the output of the permissinels.py test code print('opIDsOnMchs\n', opIDsOnMchs) shakes my understanding. For example, in a complete iteration, the final opIDsOnMchs output is [[3 1 8] [0 4 6] [2 5 7]]. I don't know how to understand the meaning of each number and how to see the sequential constraints of the Job. (The corresponding machine matrix for this example is [[2 1 3] [1 2 3] [2 3 1]])

  3. You put forward the strategy of "add arcs" in the paper. However, under this strategy, how does the machine judge the Oij sharing the same machine in the training process? Under the "remove arcs" strategy, Oij of the same machine is connected by disjunctive arcs, so only the direction of disjunctive arcs needs to be trained. However, under the "add arcs" strategy, there is no prior disjunctive arc constraint, how to ensure this?

I will feel grateful if you can take the time to reply. I am looking forward to your reply. Thank you very much!

  1. -1 because the operation id is started from 0
  2. It's operation ID on machines, recording the operation ID for each machine clique
  3. each operation has an id, the index is counted from left to right and top to bottom and should start from '0', i.e., the first operation of job 1 is indexed with 0 the second operation of job 2 is indexed with 2, etc
  4. in adding arc strategy, if the processing order among operations on machines is not determined, i.e., not dispatched yet, there are no disjunctive arcs among those oerations