《三維裝箱-程序(共5頁(yè))》由會(huì)員分享,可在線閱讀,更多相關(guān)《三維裝箱-程序(共5頁(yè))(5頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
基于遺傳模擬退火算法的三維裝箱問(wèn)題研究
從計(jì)算復(fù)雜性理論來(lái)講,裝箱問(wèn)題是一個(gè)NP難題,很難精確求解。目前的求解方法主要是一些近似算法,如NF(NextFit)近似算法、FF(FirstFit)近似算法、FFD(FirstFitDecreasing)近似算法等。近似算法的求解結(jié)果與物品的體積數(shù)據(jù)有較大關(guān)系,有時(shí)在極端情況下的求解結(jié)果很不理想。
本文以三維離線裝箱問(wèn)題為研究對(duì)象,利用遺傳算法和模擬退火算法集成的思路對(duì)該問(wèn)題進(jìn)行求解,并編寫程序代碼在 Matlab 環(huán)境下進(jìn)行實(shí)現(xiàn)。
1、 問(wèn)題描述
假設(shè)有一批待裝貨物,它們有多種貨物種類,每種貨物的尺
2、寸重量是不同的,對(duì)一尺寸己知的集裝箱進(jìn)行裝載。這里所面臨的問(wèn)題是在滿足一定約束的條件下,需要找到一種裝箱方案進(jìn)行裝載,能夠得到一種最佳的裝載效果,這里指的是空間容積率最高或者載重利用率達(dá)到最高。
2、 優(yōu)化模型
優(yōu)化模型中的目標(biāo)函數(shù)值可以評(píng)價(jià)裝箱方案的優(yōu)劣,本文考慮待裝箱子的空間利用率最大以及所使用箱子數(shù)目最小,目標(biāo)函數(shù)規(guī)定為:
其中:m 為所使用的箱子數(shù)目,Cmax為一個(gè)足夠大的常數(shù),在本文中取為1000,以保證Cmax/m為大于 1 的正數(shù),后一項(xiàng)為箱子的空間利用率,u為裝箱方案違背約束條件時(shí)的處罰值。
注:幫人代寫matlab程序,有問(wèn)題請(qǐng)咨詢qq:
部分代碼如下:
3、
% Use: 遺傳模擬退火算法主程序
% 輸入變量(可修改量): Box:箱子的屬性
% Cargo:貨物的屬性
% order:要求貨物的裝載次序
%
%
% 輸出:
4、 bestLoadOrder:具體裝箱
% author: 怡寶2號(hào)
clc;
clear;
close all;
tic
%% 數(shù)據(jù)錄入
% Box=[2.33 1.78 2.197 5000]; % 貨箱數(shù)據(jù) 長(zhǎng),寬,高,限重
% Cargo=[0.94 0.68 0.39 0. 270.5 6;0.81 1.02 0.6 0. 896 2;...
% 0.81 1.02 0.70 0. 868 4;0.73 0.69 0.80 0.40296 240 2;...
% 1.20 0.72
5、0.72 0. 280 2;1.10 0.84 0.26 0.24024 80 1;...
% 0.80 0.74 0.72 0. 180 1;1.60 1.07 0.75 1.28400 774 12;...
% 1.19 1.11 1.08 1. 960 11;1.19 1.11 0.9 1.18810 800 10;...
% 1.40 1.16 1.20 1. 420 8;0.82 0.37 0.18 0.54612 40 5]; % 貨物數(shù)據(jù)
%長(zhǎng)度(m) 寬度(m) 高度(m) 體積(m^3) 重量(kg
6、) 數(shù)量
order=[6,3,11,7,8,5,1,2,4,9,10,12;];
cmax=300; %所使用的箱子數(shù)參數(shù)
% save Box Box
% save Cargo Cargo
% toc
%% 模擬退火參數(shù)
tic
T=100; % 初始溫度
Tend=1e-3; % 終止溫度
L=5; % 各溫度下的迭代次數(shù)(鏈長(zhǎng))
q=0.8; %降溫速率
G=100;
%% 遺傳參數(shù)
Pc=0.9; %交叉概率
Pm=0.05; %變異概率
7、
popsize=20;
retain=10;
GGAP=0.9; %代溝
%% 加載數(shù)據(jù)
load Box
load Cargo
%%
N=size(Cargo,1); % 待裝箱類別數(shù)
for i=1:popsize
chrom(i,:)=randperm(N); %隨機(jī)產(chǎn)生一個(gè)裝箱順序
end
for i=1:popsize
tempchrom=chrom(i,:);
[RestSpace,LoadOrder]=IniOrder(tempchrom,Box,Cargo);
f
8、itness(i)=FitFun(cmax,RestSpace,LoadOrder,Box,tempchrom,order);
end
fitness=fitness';
%% 計(jì)算迭代的次數(shù) Time
Time=ceil(double(solve(['1000*(0.8)^x=',num2str(Tend)]))); %solve('1000*(0.8)^x=1e-3')這樣也可以
count=0; %迭代計(jì)數(shù)
Obj=[]; %目標(biāo)值矩陣初始化
track=[]; %每代的最優(yōu)路線矩陣初始化
9、
bestchrom=[];
%% 迭代
while T>Tend
count=count+1; %更新迭代次數(shù)
temp=[];
[temp index]=sort(fitness,'descend');
chrom=chrom(index,:);
chromone=chrom(1:retain,:);
fitnessone=temp(1:retain,:);
chromtwo=chrom(retain+1:end,:);
%% 交叉操作
10、 SelCh=Recombin(chromtwo,Pc);
%% 變異
SelCh=Mutate(SelCh,Pm);
tempchrom=[];
for i=1:size(SelCh,1)
tempchrom=SelCh(i,:);
[RestSpace,LoadOrder]=IniOrder(tempchrom,Box,Cargo);
fitnesstwo(i,:)=FitFun(cmax,RestSpace,LoadOrder,Box,tempchrom,order);
11、 end
for k=1:L
%% 產(chǎn)生新解
for j=1:(popsize-retain)
newchrom(j,:)=randperm(N);
end
tempchrom=[];
for i=1:(popsize-retain)
tempchrom=newchrom(i,:);
[RestSpace,LoadOrder]=IniOrder(tempch
12、rom,Box,Cargo);
newfitness(i,:)=FitFun(cmax,RestSpace,LoadOrder,Box,tempchrom,order);
end
newfitness=G-newfitness;
for i=1:(popsize-retain)
if newfitness(i,:)
13、nesstwo(i,:)=G-newfitness(i,:);
elseif exp(-(newfitness(i,:)-fitnesstwo(i,:))/T)
SelCh(i,:)=newchrom(i,:);
fitnesstwo(i,:)=G-newfitness(i,:);
% else %則原種群和解不變,即不接受模擬退火的選擇
end
end
end
專心---專注---專業(yè)