数学建模中的C语言编程
研究n个工件在m个台机器上的加工问题,需要计划与合理安排各个工件在这些问题上加工的先后次序,使得完成这个这批工件加工任务所需的时间最,总时间等于各个工件的加工时间和加工其...
研究n个工件在m个台机器上的加工问题,需要计划与合理安排各个工件在这些问题上加工的先后次序,使得完成这个这批工件加工任务所需的时间最,总时间等于各个工件的加工时间和加工其他工件时他们的等待时间之和。请高手帮用C语言写一个计算最短时间的程序,先谢谢了。
展开
1个回答
展开全部
这个问题的前提条件不明确,本人试着给出一种方法的描述,该回答基于下述假设:
1、n个工件是同时到达的;
2、任意工件可以任意机器上加工;
3、已知工件的加工时间;
基本思想:
采用短工作优先算法,从而使总加工时间最少。
该算法的详细说明可以参考任何一本《操作系统原理》
解法步骤:
1、将工件按加工时间排序,需要时间最少的排在最前;
2、设置一个M大小的数组U,表示各机器已用时间;
3、设置一个M大小的数组N,表示各机器加工当前工件还需要的时间;
4、设置一个M大小的数组R,表示各机器已运行的时间;
4、将数组U、R、N的各元素都置为0;
5、对工件数据中每个元素执行下述操作:
从数组N中找到值最小的元素x;
将数组N中每个元素的值减去元素x的值作为其新值;
将数组R中每个元素的值加上元素x的值为作其新值;
将元素x值设置为工件要求的加工时间;
修改数组U中的值:U[x]+=R[x]+N[x];
6、将数组U中各元素的值求和,得到的即为最短的总时间
祝你好运!
-------------------------------------------------------
程序用JAVA语言编写,并省略了排序操作,并假定机器数为3
public static void main(String[] arg)throws Exception
{
int[] W=new int[]{1,2,3,55,56,77,77,88,99,100};//工件需要的工作时间
int[] U=new int[]{0,0,0};//各机器加工的工件已用的总时间,含等待时间
int[] R=new int[]{0,0,0};//各机器已运行的时间
int[] N=new int[]{0,0,0};//各机器加工完当前工作需要的时间
for(int i=0;i<W.length;i++)
{
/**找到当前机器中最早可用的机器,用m表示机器的代号,x表示机器完成当前工作需要的时间*/
int m=0;
for(int j=1;j<N.length;j++)if(N[j]<N[m])m=j;
int x=N[m];
//将数组N中每个元素的值减去元素x的值作为其新值;
//将数组R中每个元素的值加上元素x的值为作其新值;
for(int j=0;j<N.length;j++)
{
N[j]-=x;
R[j]+=x;
}
//将元素x(即机器m)值设置为工件要求的加工时间;
N[m]=W[i];
U[m]+=(R[m]+N[m]);
}
int total=0;
for(int i=0;i<U.length;i++)total+=U[i];
System.out.println("总时间等于:"+total);
}
1、n个工件是同时到达的;
2、任意工件可以任意机器上加工;
3、已知工件的加工时间;
基本思想:
采用短工作优先算法,从而使总加工时间最少。
该算法的详细说明可以参考任何一本《操作系统原理》
解法步骤:
1、将工件按加工时间排序,需要时间最少的排在最前;
2、设置一个M大小的数组U,表示各机器已用时间;
3、设置一个M大小的数组N,表示各机器加工当前工件还需要的时间;
4、设置一个M大小的数组R,表示各机器已运行的时间;
4、将数组U、R、N的各元素都置为0;
5、对工件数据中每个元素执行下述操作:
从数组N中找到值最小的元素x;
将数组N中每个元素的值减去元素x的值作为其新值;
将数组R中每个元素的值加上元素x的值为作其新值;
将元素x值设置为工件要求的加工时间;
修改数组U中的值:U[x]+=R[x]+N[x];
6、将数组U中各元素的值求和,得到的即为最短的总时间
祝你好运!
-------------------------------------------------------
程序用JAVA语言编写,并省略了排序操作,并假定机器数为3
public static void main(String[] arg)throws Exception
{
int[] W=new int[]{1,2,3,55,56,77,77,88,99,100};//工件需要的工作时间
int[] U=new int[]{0,0,0};//各机器加工的工件已用的总时间,含等待时间
int[] R=new int[]{0,0,0};//各机器已运行的时间
int[] N=new int[]{0,0,0};//各机器加工完当前工作需要的时间
for(int i=0;i<W.length;i++)
{
/**找到当前机器中最早可用的机器,用m表示机器的代号,x表示机器完成当前工作需要的时间*/
int m=0;
for(int j=1;j<N.length;j++)if(N[j]<N[m])m=j;
int x=N[m];
//将数组N中每个元素的值减去元素x的值作为其新值;
//将数组R中每个元素的值加上元素x的值为作其新值;
for(int j=0;j<N.length;j++)
{
N[j]-=x;
R[j]+=x;
}
//将元素x(即机器m)值设置为工件要求的加工时间;
N[m]=W[i];
U[m]+=(R[m]+N[m]);
}
int total=0;
for(int i=0;i<U.length;i++)total+=U[i];
System.out.println("总时间等于:"+total);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询