Anylogic:如何添加路线选择(基于路线成本)?
Anylogic: How to add the choice of route (based on route costs)?
在我的 Anylogic 模型中,我添加了一个 Java class MyRoute 和一个从数据库读取路线成本的函数:
GISRoute route = main.map.getRoute(
(double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.uniqueResult(odcosts.latitudeorigin),
(double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.uniqueResult(odcosts.longitudeorigin),
(double) selectFrom(odcosts)
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.latitudedestination),
(double) selectFrom(odcosts)
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.longitudedestination), true);
MyRoute myRoute = new MyRoute();
myRoute.route = route;
myRoute.cost = (double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.cost);
我现在如何添加要使用的卡车选择(当他们收到订单时):
A) 白天出发地和目的地之间的直达路线
B) 经由枢纽的路线(始发地 -> 夜间枢纽 & 枢纽 -> 白天目的地)
我如何告诉卡车代理人查看路线和费用并做出决定?
提前致谢!
我通常将这些信息写入一维或二维Arraylists,具体取决于输入信息的维度:
ArrayList<ArrayList<Float>> routes=new ArrayList<ArrayList<Float>>();
。
您可以删除不符合某些条件的车道,如下所示:
routes.removeIf(s -> s.get(0) != "myCustomer");
然后遍历OD信息并将每个的成本添加到arrayList中。
List <Float> costs=new ArrayList<Float>();
for (int route_no=0;route_no<routes.size();route_no++) {
cost=routes.get(route_no);
costs.add(cost);
}
然后像这样找到最小成本的索引:
int indexMin=0;
for (int i2=0; i2<costs.size(); ++i2) {
if (min > costs.get(i2)) {
min = costs.get(i2);
indexMin = i2;
}
}
现在您知道最便宜期权的指数是 indexMin。然后你可以用这些信息做任何你想做的事。
在我的 Anylogic 模型中,我添加了一个 Java class MyRoute 和一个从数据库读取路线成本的函数:
GISRoute route = main.map.getRoute(
(double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.uniqueResult(odcosts.latitudeorigin),
(double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.uniqueResult(odcosts.longitudeorigin),
(double) selectFrom(odcosts)
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.latitudedestination),
(double) selectFrom(odcosts)
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.longitudedestination), true);
MyRoute myRoute = new MyRoute();
myRoute.route = route;
myRoute.cost = (double) selectFrom(odcosts)
.where(odcosts.origin.eq(order.terminal.name))
.where(odcosts.destination.eq(order.customer.name))
.uniqueResult(odcosts.cost);
我现在如何添加要使用的卡车选择(当他们收到订单时):
A) 白天出发地和目的地之间的直达路线
B) 经由枢纽的路线(始发地 -> 夜间枢纽 & 枢纽 -> 白天目的地)
我如何告诉卡车代理人查看路线和费用并做出决定?
提前致谢!
我通常将这些信息写入一维或二维Arraylists,具体取决于输入信息的维度:
ArrayList<ArrayList<Float>> routes=new ArrayList<ArrayList<Float>>();
。
您可以删除不符合某些条件的车道,如下所示:
routes.removeIf(s -> s.get(0) != "myCustomer");
然后遍历OD信息并将每个的成本添加到arrayList中。
List <Float> costs=new ArrayList<Float>();
for (int route_no=0;route_no<routes.size();route_no++) {
cost=routes.get(route_no);
costs.add(cost);
}
然后像这样找到最小成本的索引:
int indexMin=0;
for (int i2=0; i2<costs.size(); ++i2) {
if (min > costs.get(i2)) {
min = costs.get(i2);
indexMin = i2;
}
}
现在您知道最便宜期权的指数是 indexMin。然后你可以用这些信息做任何你想做的事。