-
大小: 15KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-12
- 語(yǔ)言: 其他
- 標(biāo)簽: CPLEX??VRPTW??原創(chuàng)代碼??
資源簡(jiǎn)介
CPLEX求解VRPTW,數(shù)據(jù)來源于Solomon標(biāo)準(zhǔn)數(shù)據(jù),原創(chuàng)代碼,可以直接運(yùn)行,注釋寫的很詳細(xì),花費(fèi)了一些心思。想了解更多詳情,可關(guān)注微信公眾號(hào):數(shù)據(jù)魔術(shù)師

代碼片段和文件信息
package?vrptw;
import?java.io.BufferedReader;
import?java.io.FileReader;
import?java.util.ArrayList;
import?java.util.Scanner;
import?ilog.concert.IloException;
import?ilog.concert.IloNumExpr;
import?ilog.concert.IloNumVar;
import?ilog.concert.IloNumVarType;
import?ilog.cplex.IloCplex;
/**
?*?@author:?huangnan
?*?@School:?HuaZhong?University?of?science?and?technology
?*?@操作說明:讀入不同的文件前要手動(dòng)修改vetexnum參數(shù),參數(shù)值為所有點(diǎn)個(gè)數(shù)包括配送中心0和n+1,
?*?代碼算例截取于Solomon測(cè)試算例
?*
?*/
//定義參數(shù)
class?Data{
int?vetexnum; //所有點(diǎn)集合n(包括配送中心和客戶點(diǎn),首尾(0和n)為配送中心)
double?E; ?????? //配送中心時(shí)間窗開始時(shí)間
double L; ????? ? //配送中心時(shí)間窗結(jié)束時(shí)間
int?vecnum;???? //車輛數(shù)
double?cap;????? //車輛載荷
int[][]?vertexs; //所有點(diǎn)的坐標(biāo)xy
int[]?demands; //需求量
int[]?vehicles; //車輛編號(hào)
double[]?a; //時(shí)間窗開始時(shí)間【a[i]b[i]】
double[]?b; //時(shí)間窗結(jié)束時(shí)間【a[i]b[i]】
double[]?s; //客戶點(diǎn)的服務(wù)時(shí)間
int[][]?arcs; //arcs[i][j]表示i到j(luò)點(diǎn)的弧
double[][]?dist; //距離矩陣,滿足三角關(guān)系暫用距離表示花費(fèi)?C[i][j]=dist[i][j]
//截?cái)嘈?shù)3.26434-->3.2
public?double?double_truncate(double?v){
int?iv?=?(int)?v;
if(iv+1?-?v?<=?0.000000000001)
return?iv+1;
double?dv?=?(v?-?iv)?*?10;
int?idv?=?(int)?dv;
double?rv?=?iv?+?idv?/?10.0;
return?rv;
}
}
//類功能:解的可行性判斷(可直接跳過此類)
class?Solution{
double?epsilon?=?0.0001;
Data?data?=?new?Data();
ArrayList>?routes?=?new?ArrayList<>();
ArrayList>?servetimes?=?new?ArrayList<>();
public?Solution(Data?data?ArrayList>?routes?ArrayList>?servetimes)?{
super();
this.data?=?data;
this.routes?=?routes;
this.servetimes?=?servetimes;
}
//函數(shù)功能:比較兩個(gè)數(shù)的大小
public?int?double_compare(double?v1double?v2)?{
if?(v1? return?-1;
}
if?(v1?>?v2?+?epsilon)?{
return?1;
}
return?0;
}
//函數(shù)功能:解的可行性判斷
public?void?fesible()?throws?IloException?{
//車輛數(shù)量可行性判斷
if?(routes.size()?>?data.vecnum)?{
System.out.println(“error:?vecnum!!!“);
System.exit(0);
}
//車輛載荷可行性判斷
for?(int?k?=?0;?k? ArrayList?route?=?routes.get(k);
double?capasity?=?0;
for?(int?i?=?0;?i? capasity?+=?data.demands[route.get(i)];
}
if?(capasity?>?data.cap)?{
System.out.println(“error:?cap!!!“);
System.exit(0);
}
}
//時(shí)間窗、車容量可行性判斷
for?(int?k?=?0;?k? ArrayList?route?=?routes.get(k);
ArrayList?servertime?=?servetimes.get(k);
double?capasity?=?0;
for?(int?i?=?0;?i? int?origin?=?route.get(i);
int?destination?=?route.get(i+1);
double?si?=?servertime.get(i);
double?sj?=?servertime.get(i+1);
if?(si???data.b[origin])?{
System.out.println(“error:?servertime!“);
System.exit(0);
}
if?(double_compare(si?+?data.dist[origin][destination]data.b[destination])?>?0)?{
System.out.println(origin?+?“:?[“?+?data.a[origin
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????598??2017-06-04?20:04??VRPTW\.settings\org.eclipse.jdt.core.prefs
?????文件????????752??2017-09-20?13:27??VRPTW\bin\vrptw\Data.class
?????文件???????3608??2017-09-20?13:27??VRPTW\bin\vrptw\Solution.class
?????文件??????10216??2017-09-20?13:27??VRPTW\bin\vrptw\Vrptw.class
?????文件???????7523??2017-09-06?15:17??VRPTW\data\c101.txt
?????文件???????7523??2017-09-06?14:43??VRPTW\data\c102.txt
?????文件??????15393??2017-09-20?13:27??VRPTW\src\vrptw\Vrptw.java
?????目錄??????????0??2017-09-20?13:43??VRPTW\bin\vrptw
?????目錄??????????0??2017-09-20?13:43??VRPTW\src\vrptw
?????目錄??????????0??2017-09-20?13:43??VRPTW\.settings
?????目錄??????????0??2017-09-20?13:43??VRPTW\bin
?????目錄??????????0??2017-09-20?13:43??VRPTW\data
?????目錄??????????0??2017-09-20?13:43??VRPTW\src
?????目錄??????????0??2017-09-20?13:43??VRPTW
-----------?---------??----------?-----??----
????????????????45613????????????????????14
- 上一篇:cplex使用介紹
- 下一篇:安快車牌識(shí)別軟件調(diào)試說明書
評(píng)論
共有 條評(píng)論