Archived
0

fill all field on copy or add path

This commit is contained in:
iMoHax
2015-01-09 17:58:10 +03:00
parent 11c714087c
commit e8a755c6f8
3 changed files with 74 additions and 21 deletions

View File

@@ -217,7 +217,6 @@ public class RouterController {
StationModel tS = tStation.getValue(); StationModel tS = tStation.getValue();
OrderModel order = Screeners.showOrders(market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue())); OrderModel order = Screeners.showOrders(market.getOrders(s, sS, t, tS, totalBalance.getValue().doubleValue()));
if (order!=null){ if (order!=null){
//TODO: fix set balanace
orders.add(order); orders.add(order);
addOrderToPath(order); addOrderToPath(order);
} }

View File

@@ -49,28 +49,38 @@ public class PathRoute extends Path<Vendor> {
return new PathRoute(this.getCopy(), vertex, refill); return new PathRoute(this.getCopy(), vertex, refill);
} }
public void add(PathRoute path, boolean withOrders) { public void add(PathRoute path, boolean noSort) {
LOG.trace("Add path {} to {}", path, this); LOG.trace("Add path {} to {}", path, this);
PathRoute res = this; PathRoute res = this;
path = path.getRoot(); path = path.getRoot();
if (!path.getTarget().equals(getTarget())){ if (!path.getTarget().equals(getTarget())){
LOG.trace("Is not connected path, add edge from {} to {}", path.getTarget(), getTarget());
res = new PathRoute(res, path.getTarget(), true); res = new PathRoute(res, path.getTarget(), true);
res.updateDistance();
} }
while (path.hasNext()){ while (path.hasNext()){
path = path.getNext(); path = path.getNext();
res = new PathRoute(res, path.getTarget(), res == this || path.isRefill()); res = new PathRoute(res, path.getTarget(), path.isRefill());
if (withOrders){ if (noSort){
res.orders.clear(); copyField(path, res);
res.orders.addAll(path.getOrders());
} }
} }
if (withOrders){ if (noSort){
update(); update();
} else { } else {
res.finish(); res.finish();
} }
} }
private void copyField(PathRoute source, PathRoute dest){
dest.orders.clear();
dest.orders.addAll(source.getOrders());
dest.distance = source.distance;
dest.profit = source.profit;
dest.balance = source.balance;
dest.landsCount = source.landsCount;
}
public PathRoute getCopy(){ public PathRoute getCopy(){
return getCopy(false); return getCopy(false);
} }
@@ -79,15 +89,13 @@ public class PathRoute extends Path<Vendor> {
PathRoute path = getRoot(); PathRoute path = getRoot();
PathRoute res = new PathRoute(path.getTarget(), path.byAvg); PathRoute res = new PathRoute(path.getTarget(), path.byAvg);
if (withOrders) { if (withOrders) {
res.orders.clear(); copyField(path, res);
res.orders.addAll(path.getOrders());
} }
while (path.hasNext()){ while (path.hasNext()){
path = path.getNext(); path = path.getNext();
res = new PathRoute(res, path.getTarget(), path.isRefill()); res = new PathRoute(res, path.getTarget(), path.isRefill());
if (withOrders) { if (withOrders) {
res.orders.clear(); copyField(path, res);
res.orders.addAll(path.getOrders());
} }
} }
return res; return res;
@@ -114,12 +122,15 @@ public class PathRoute extends Path<Vendor> {
p = p.getNext(); p = p.getNext();
p.updateBalance(); p.updateBalance();
} }
while (p != this){ p = this;
p.updateProfit();
p.updateLandsCount();
while (!p.isRoot()){
p = p.getPrevious();
p.updateProfit(); p.updateProfit();
p.updateLandsCount(); p.updateLandsCount();
p = p.getPrevious();
} }
getRoot().updateDistance(); p.updateDistance();
} }
private void fillOrders(){ private void fillOrders(){

View File

@@ -315,7 +315,7 @@ public class PathRouteTest extends Assert {
private PathRoute initTest6A(){ private PathRoute initTest6A(){
LOG.info("Init test 6A"); LOG.info("Init test 6A");
v1 = new SimpleVendor("v1",0,0,0); v1 = new SimpleVendor("v1",0,0,0);
v2 = new SimpleVendor("v2",0,0,0); v2 = new SimpleVendor("v2",0,1,0);
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100, -1)); v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100, -1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, -1)); v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, -1));
@@ -332,10 +332,10 @@ public class PathRouteTest extends Assert {
return res.getRoot(); return res.getRoot();
} }
private PathRoute initTest6B(){ private PathRoute initTest6B(double balance){
LOG.info("Init test 6B"); LOG.info("Init test 6B");
v3 = new SimpleVendor("v3",0,0,0); v3 = new SimpleVendor("v3",0,1,1);
v4 = new SimpleVendor("v4",0,0,0); v4 = new SimpleVendor("v4",1,1,1);
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1)); v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1));
@@ -346,7 +346,7 @@ public class PathRouteTest extends Assert {
res = (PathRoute) res.connectTo(new Vertex<>(v3), false); res = (PathRoute) res.connectTo(new Vertex<>(v3), false);
res = (PathRoute) res.connectTo(new Vertex<>(v4), false); res = (PathRoute) res.connectTo(new Vertex<>(v4), false);
res.finish(); res.finish();
res.sort(500, 5); res.sort(balance, 5);
return res.getRoot(); return res.getRoot();
} }
@@ -355,14 +355,15 @@ public class PathRouteTest extends Assert {
public void testAddPathRoute() throws Exception { public void testAddPathRoute() throws Exception {
LOG.info("Start add path route test"); LOG.info("Start add path route test");
PathRoute path = initTest6A(); PathRoute path = initTest6A();
PathRoute pathB = initTest6B(); PathRoute pathB = initTest6B(500);
path.getEnd().add(pathB, false); path.getEnd().add(pathB, false);
path.sort(500, 5); path.sort(500, 5);
path = path.getRoot(); path = path.getRoot();
assertEquals(620, path.getProfit(), 0.0001); assertEquals(620, path.getProfit(), 0.0001);
assertEquals(3, path.getLandsCount()); assertEquals(2, path.getLandsCount());
assertEquals(3, path.getDistance(), 0.0001);
path = path.getNext(); path = path.getNext();
Collection<Order> orders = path.getOrders(); Collection<Order> orders = path.getOrders();
@@ -394,4 +395,46 @@ public class PathRouteTest extends Assert {
} }
@Test
public void testAddPathRouteNoSort() throws Exception {
LOG.info("Start add path route test");
PathRoute path = initTest6A();
PathRoute pathB = initTest6B(550);
path.getEnd().add(pathB, true);
path = path.getRoot();
assertEquals(260, path.getProfit(), 0.0001);
assertEquals(3, path.getLandsCount());
assertEquals(3, path.getDistance(), 0.0001);
path = path.getNext();
Collection<Order> orders = path.getOrders();
Order order1 = new Order(v1.getSell(ITEM1), v3.getBuy(ITEM1), 5);
Order order2 = new Order(v1.getSell(ITEM2), v2.getBuy(ITEM2), 2);
Order order3 = new Order(v1.getSell(ITEM3), v4.getBuy(ITEM3), 1);
Order order4 = new Order(v2.getSell(ITEM1), v3.getBuy(ITEM1), 3);
Order order5 = new Order(v2.getSell(ITEM3), v4.getBuy(ITEM3), 1);
Order order7 = new Order(v3.getSell(ITEM3), v4.getBuy(ITEM3), 1);
assertEquals(500, path.getBalance(), 0.0001);
assertEquals(260, path.getProfit(), 0.0001);
TestUtil.assertCollectionEquals(orders, order2, PathRoute.TRANSIT);
path = path.getNext();
orders = path.getOrders();
assertEquals(550, path.getBalance(), 0.0001);
assertEquals(210, path.getProfit(), 0.0001);
TestUtil.assertCollectionEquals(orders, order4, order5, PathRoute.TRANSIT);
path = path.getNext();
orders = path.getOrders();
assertEquals(700, path.getBalance(), 0.0001);
assertEquals(60, path.getProfit(), 0.0001);
TestUtil.assertCollectionEquals(orders, order7, PathRoute.TRANSIT);
}
} }