收藏 分销(赏)

零件加工时间最优化的动态规划模型.doc

上传人:xrp****65 文档编号:6016040 上传时间:2024-11-25 格式:DOC 页数:6 大小:146KB 下载积分:10 金币
下载 相关 举报
零件加工时间最优化的动态规划模型.doc_第1页
第1页 / 共6页
零件加工时间最优化的动态规划模型.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
零件加工时间最优的动态规划模型 摘要 零件加工最有时间问题是典型的动态规划问题。建立一个动态规划模型,按照这类问题的基本思路,抓住等待时间这一关键要素,运用计算机模拟求解(我们用C写了一个程序(见附录),可以模拟零件个数12以内的所有情况,得出最优时间和零件编号的顺序。程序已做成文件,与论文的电子稿一起放在ftp上)。 关键词:动态规划;机床零件;时间最优; 1问题的重述 例题3(工件排序问题) 某修理车间因修理工作需要生产个不同的工件,每个工件都需要先在机床,后在机床上进行加工。不妨用编号分别代表不同的工件,以、表示工件 需在,机床上加工的时间。如果该车间只有一台机床,一台 机床,且、不受加工工件顺序的影响,问如何安排零件在,机床上的加工顺序,才能使机床加工总时间(从机床开始加工,至两机床均将工件加工完为止)最短? 2 约定符号和名词解释 :为第阶段选择的零件需要的等待时间。 :为零件通过机床的顺序编号的集合; :为顺序集合中第个元素,即为第阶段选择的零件的编号。 3 问题的分析 对于零件加工求解时间最优的问题,是典型的动态规划问题。根据题目,首先将问题划分个阶段,每个阶段选择一个零件,将零件的编号计入数组,通过计算等待时间的最小值,来确定选择的零件顺序。 根据题目可知,零件一定要先经过机床,才能通过机床,那么机床应该是不停工作的;而机床前一个零件的加工时间长短,直接影响机床目前零件能否立刻加工,若机床前一个零件加工时间过长,就必须停下来等待,才而产生现等待时间。本问题正是要抓住等待时间这一变化量,列出递推公式,用计算机模拟求得结果。 4 模型的假设 根据题目,提出以下几个假设: (1)假设加工零件在同一条流水生产线上,即零件通过A机床的顺序与通过B机床的顺序一致。 5 问题模型的建立 5.1问题的进一步分析 既然是典型的动态规划问题,就可以用通用的解题思想和步骤进行求解,即将多阶段决策过程最优化问题划分阶段, 恰当地选取状态变量、决策变量及定义最优指标函数。 根据题目,共有个零件,那么就将整个过程分为个阶段,每次阶段选择一个零件,把每次选择的零件编号存入一个数组中,用这个数组来记录零件通过机床的顺序;将等待时间作为状态变量,而把零件加工的总时间作为指标函数。最终问题就是解最小的零件加工时间。 5.2模型的建立和求解 首先,设每个零件的等待时间为,不需要等待的零件 “0”。根据题目,零件一定要先经过机床,才能通过机床,那么机床应该是不停工作的,而机床会由于机床前一个零件加工时间过长而出现等待时间。如图所示 列出等待时间的函数: 第一个零件不需要等待,时间是 , 从第二个零件起,等待时间: (5.1) 根据上图,加工所有零件所需要的总时间是第一个零件的机床时间、所有零件的机床加工时间、所有等待时间三者之和,为: , (5.2) 根据穷举法,通过C语言编程(程序见附录),可解得最终数据。 6 模型的评价和推广 零件加工时间最优问题,是最简单最常用的动态规划问题。本问题中的模型就是针对这类问题建立的, 模型的优点:能准确的计算住零件加工的顺序,和所需的时间。 模型的缺点:模型的时间复杂度是,当零件个数较多时(从超过9个开始),模型运算所需的时间飙升,对零件个数较大的情况,这个模型无能为力。 参考文献 [1]张润琦,《动态规划》,1989:10-18. [2]秦学志,《实用最优方法》,第三版,大连:大连理工大学出版社,2007. 附录 C语言编写的程序为: #include<stdio.h> #include<stdlib.h> #include <time.h> #define cl ((clock_t)1)//计算时间函数 #define M 23 int n,t=0,s[M],re[M]; double a[M],b[M],tm=111111111,tn=0.0,wt=0.0; double max(double x,double y) { if(x>y) return x; else return y; } double sum1(int x,int y) { double all=0.0; int i=0; for(i=x;i<=y;i++) all+=a[i]; return all; } double sum2(int x,int y) { double all=0.0; int i=0; for(i=x;i<=y;i++) all+=b[i]; return all; } void time(int *p) { int j=0,k=1,i=0; wt=0.0; if(a[p[1]]>b[p[0]]) wt+=a[p[1]]-b[p[0]]; for(i=0;i<n;i++) while(i>1) if(sum1(i-k,i)>=sum2(i-k-1,i-1)) { wt+=max(sum1(i-k,i)-sum2(i-k-1,i-1),0); k=1; break; } else { k++; break; } for(i=0;i<n;i++) wt+=b[p[i]]; wt+=a[p[0]]; tn=wt; if (tm>tn) { tm=tn; for(i=0;i<n;i++) re[i]=p[i]+1; } } void sort(int t) { int i=0,op=0,j; if(t==n) time(s); else { for(i=0;i<n;i++) { op=1; for(j=0;j<t;j++) if(s[j]==i) { op=0; break; } if(op) { s[t]=i; t++; sort(t); t--; } } } } void main() { int i=0; //clock_t begin,finsh;//计算时间函数 // double ss; //计算时间函数 // begin=clock();//计算时间函数 printf("请输入工件个数 (建议个数小于12 否则需要耐心等待 哟 亲!) \n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入A机器加工第%d工件的时间 \n",i+1); scanf("%lf",&a[i]); } for(i=0;i<n;i++) { printf("请输入B机器加工第%d工件的时间 \n",i+1); scanf("%lf",&b[i]); } for(i=0;i<n;i++) { s[0]=i; sort(1); } // finsh=clock();//计算时间函数 // ss=(finsh-begin)/cl;//计算时间函数 printf("最小时间为 %g\n",tm); // printf("所耗时间为 %f ms\n",ss);//计算时间函数 printf("加工工件顺序为\n"); for(i=0;i<n;i++) printf("(%d) %d号工件\n",i+1,re[i]); system("pause"); } 5
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服