现有N个实习小组,要进行一产品生产工序操作的学习,该产品有M个工序,各工序有各自的实习要求时间(连续I周)及同时允许J个小组实习,在实习期间(总时间根据M[1]*I[1]+M[2]*I[2]+…+M[x]*I[x])得到,小组数据N不能大于各工序所能允许小组数量的总和(M[1]*J[1]+M[2]*J[2]+…+M[x]*J[x]))。要求各小组在实习期间必须各个工序都要进行学习。请教这种情况的排班算法
提供思路即可,如能提供主要算法的代码那是最好不过
提供思路即可,如能提供主要算法的代码那是最好不过
解决方案 »
- linrenqing
- 求一MSSQL Server字符串函数,请大家帮帮我,谢谢啊
- 请问各位大侠如何把数据库中的记录(自下而上滚动)显示出来
- 帮忙分析一下代码有什么错误~~~~~~在线等~~~~~~~~~~~
- 一个关于大文件传送的问题
- 关于控件安装提示缺少文件?
- 求一个查询带下拉菜单的组件,望大虾们指导下。
- 客户不用安装IIS /PWS 的环境下,打开http://localhost:5050
- 如何设置PrintDBGridEh1.AfterGridTexT.Text的字体
- 用delphi开发基于internet的非浏览器人机界面的系统技术要点?
- 大家谁参加过delphi的等级考试?这个考试都考些什么内容?用什么教材呢?
- 兄弟们,快去下载vs2005正式版啊!
有N个小组M个工序,p[i]表示第i工序所需的时间,q[i]表示第i工序最大组数。按我的理解这里的N,M,p[i],q[i](i=1,2...M)都是常数。至于楼主的公式我看不明白,烦请解释一下?
实习总时间是p[1]+p[2]+...+p[M]
其中N<=q[1]+q[2]+..+q[M]现在要求就要实习总时间内完成各个小组的安排
不允许超过,如果超过的话认为是无法完成的排班
不允许超过,如果超过的话认为是无法完成的排班”而每个小组又是每个工序都要做,而且每个工序固定的时间就是p[i],那么计算出来的固定小组实习的最短时间岂不都是p[1]+p[2]+...+p[M]了?
最主要是怎么样去安排,使得各小组都能在这段时间内实习完成
所以要解决问题,先要确定组数啊,如果就一个组,那么时间肯定最少了,也不用排了!
不知道我的描述是否正确?
不过,如果M分别取[1,n]中的不同值对于不同M应该有相应解,考虑先!
如4组2道工序,第一道工序最大1组,第二道工序最大6组而且两道工序时间一样那么
时间最少为4p[1]而非p[1]+p[2]=2[p1]
比如N=3,M=2,q[1]=1,q[2]=4情况1:p[2]=p[1]
那么 显见最小时间为3p[1]情况2:p[2]=2[p1]
那么 显见最小时间为2p[2]=4[p1]也不为p[1]+p[2]=3p[1]总之干感觉到想在p[1]+...+p[M]内完成纯属痴心妄想
求数组
I[1,1] I[1,2] ... I[1,K]
I[2,1] I[2,2] ... I[2,K]
... ... ... ...
I[N,1] I[N,2] ... I[N,K]其中
1.K=一共要排K次班,K>=M
2.I[i,j]为第i组第j班正在执行的工序。取值0..M,0代表轮空。
3.对每一行I[i,1]...I[i,K] 必须包含所有的0..M,I[i,m]...I[i,n](m..n为连续的属于1..K的子集)可以相同,但在这一组中除0外只能重复出现一次。
4.对每一列I[1..j]...I[N..j] 必须满足它所有取的不同的值m的重复个数R[m]应<=m工序允许的最大组数q[m]使得
N组中完成工序所需最长的时间最小
M1=(1天,1人)
M2=(2天,2人)那么
最多安排人<= 3人
最多安排天<= 3天穷举:
第一天:1人M1,2人M2
第二天:1人M1,2人M2
第三天:1人M1,2人M2
----------------------
合计: 3人 6人似乎是可以的,但实际上第二天的做M1的人是把M2的两天拆分开才完成M2的。如果不允许没完成一个工序就去做另一个工序,那么这显然是不可能的。因此没有算法。