该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//坯料长度
var arrTypeLength=new Array(1500,2000,3000);
var arrTypeLength1=new Array(1500,2000,3000);
//坯料需要的数量
var arrTypeNum=new Array(10,11,15);
var arrTypeNumc=new Array(10,11,15);
//母料长度,数量不限
var cailiao=6000;
//每切一刀损耗
var shunhao=8;
var maxdao=5;
//更新坯料下了多少根
//for (var i=0;i<10;i++){
//duzuhe();
//}
//组合
var zuhe=new Array();
var mybreak=true;
var cailiaozongshu=0;
while(mybreak){
minNum(duzuhe());
for(var y=0;y
if(arrTypeNum[y]==0){
arrTypeLength1.splice(y,1);
arrTypeNum.splice(y,1);
}
}
if(arrTypeLength1.length==0 ){
mybreak=false;
}
}
document.write("
共用料"+cailiaozongshu+"根,材料应用率为:"+bilie(cailiaozongshu)+"
");
//求比列
function bilie(num){
var tnum=0;
for(var i=0;i
tnum=tnum+(arrTypeLength[i]*arrTypeNumc[i]);
}
return tnum/(num*cailiao);
}
function duzuhe(){
//余料
var yuliao=new Array();
//第几次组合
var zuheNum=0;
//当前要切的尺寸
for (var i=0;i<50000;i++){
//当前用的料
var nowCailiao=cailiao;
//切第几刀
var daoNum=0;
//当前组合
var nowZuhe=new Array();
while(true){
var nowTypeLength=panduanQieliao(arrTypeLength1,nowCailiao,daoNum);
if(nowTypeLength<=0){
break ;
}
//可以切,每一刀8个毫米的损耗
nowCailiao-=(nowTypeLength+8);
if(isNaN(nowTypeLength)){
var a ;
};
//将这个长度写入数组
nowZuhe[daoNum]=nowTypeLength;
daoNum++;
if(daoNum==maxdao){
break;
}
}
//将当前组合写入存储到数组
zuhe[i]=[].concat(nowZuhe);
}
var wanmeizuheId=0;
var wanmeizuheBili=0;
//执行到这里就是一个大的组合了
//根据原材料利用率来选择使用方法
for(var i=0;i
var wanmeizuheId=0;
var wanmeizuheBili=0;
var tempNum=0;
for(var t=0;t
if(zuhe[i][t]== "undefined"){
zuhe[i][t]=0;
}
tempNum+=zuhe[i][t];
}
if((cailiao-tempNum)
wanmeizuheId=i;
wanmeizuheBili=cailiao-tempNum;
}
}
//alert(zuhe[wanmeizuheId]);
if(zuhe.length==0){
var a ;
}
return zuhe[wanmeizuheId] ;
}
//第一组接近最优方案
//按照最优方案下料
//产生一个随机数
function myrandm(num){
return Math.floor(Math.random()*num);
}
//判断母料是否能再切一块坯料
function panduanQieliao(arr,muliao,daoNum_x){
var temp = new Array();
var tempi=0;
for(var i=0;i
if(muliao>=arr[i]){
temp[tempi]=i;
tempi++;
}
}
var tempn=0;
if(daoNum_x==0){
for(var i=0;i
if(arr[temp[i]]>tempn){
tempn=arr[temp[i]];
}
}
return tempn;
}
if (tempi==0){
return 0;
}else if(tempi==1){
return arr[temp[0]];
}else {
//产生一个随机数
return arr[temp[myrandm(temp.length)]];
}
}
//根据这一个数组下料
function minNum(arr){
//判断切多少根
var tempNumgen=0;
//arr=new Array(4500,4500,800);
//切得是那一道
var qietype=new Array();
//一刀是要切几次
var qienum=new Array();
//
//生成当前切几次
for(var i=0;i
var zhuangtai=0;
if(i==0){
qietype[0]=arr[i];
qienum[0]=0;
}else{
var zt=0;
for(var t=0;t
if(arr[i]==qietype[t]){
zt=1;
}
}
if(zt==0){
qietype.push(arr[i]);
qienum.push(0);
}
}
}
var liaonum=0;
//下料状态是正在进行
var qieliaozhuangtai="jinxing";
//余料
var yuliao_the=0;
while(true){
var liao=cailiao;
for(var i=0;i
for(var t=0;t
if(arr[i]==arrTypeLength1[t]){
if(arrTypeNum[t]>0){
arrTypeNum[t]-=1;
liao-=arr[i];
if(arrTypeNum[t]==0){
qieliaozhuangtai="wancheng";
}
for(var x=0;x
if(qietype[x]==arr[i]){
qienum[x]++;
}
}
break;
}
}
}
}
//切完后更新数组
for(var y=0;y
if(arrTypeNum[y]==0){
arrTypeLength1.splice(y,1);
arrTypeNum.splice(y,1);
}
}
var str="
材料:"+(liaonum+1)+" 根------";
if(qieliaozhuangtai=="wancheng" && liao==cailiao){
for(var j=0;i
str=str+qietyp[j]+" * "+qienum[j]+"-----------------";
}
document.write(str);
cailiaozongshu+=(liaonum+1);
return str;
}else if(qieliaozhuangtai=="wancheng" && liao0) {
//这个类型下料完成
//看看余料是否还能下料
var yuliaozuhe= new Array();
while(true){
var tn=0;
tn=panduanQieliao(arrTypeLength1,liao,0);
if(tn==0){
//不能在下料
break;
}else{
yuliaozuhe.push(tn);
liao-=tn;
}
}
if(yuliaozuhe.length==0){
for(var j=0;j
str=str+qietype[j]+" * "+qienum[j]+"-----------------";
}
cailiaozongshu+=(liaonum+1);
document.write(str);
return;
}else {
for(var j=0;j
str=str+qietype[j]+" * "+qienum[j]+"-----------------";
}
str+="
余料处理:"
for(var j=0;j
str=str+yuliaozuhe[j]+" * 1 ----------";
for(var p=0;p
if(yuliaozuhe[j]==arrTypeLength1[p]){
arrTypeNum[p]--;
}
}
}
document.write(str);
cailiaozongshu+=(liaonum+1);
return;
}
}
liaonum++
}
//找出数量最少的
//确定切多少根材料
for (var i=0;i
for(var t=0;t
if(arr[i]==arrTypeLength[t]){
if(tempNumgen
tempNumgen=arrTypeNum[t];
}
}
}
}
//开始切
}
//先求单根解,
//每根有不同的组合
//甄选最优组合,成倍切下
//变更剩下需要下料数量
//重复上面步骤
//考虑到成本,最好每根下料不超过4次
Hello world!