Archived
0

check demand and supply for order limit count

This commit is contained in:
iMoHax
2014-11-27 14:00:31 +03:00
parent 86c4abaa96
commit dd00f7be39
6 changed files with 88 additions and 69 deletions

View File

@@ -49,7 +49,7 @@ public class MarketAnalyzer {
for (Offer sell : vendor.getAllSellOffers()) {
LOG.trace("Sell offer {}", sell);
if (sell.getCount() == 0) continue;
long count = Math.min(sell.getCount(), Math.min(cargo, (long) Math.floor(balance / sell.getPrice())));
long count = Order.getMaxCount(sell, balance, cargo);
LOG.trace("count = {}", count);
if (count == 0) continue;
Iterator<Offer> buyers = market.getStatBuy(sell.getItem()).getOffers().descendingIterator();
@@ -84,7 +84,7 @@ public class MarketAnalyzer {
for (Vendor seller : from.get()) {
for (Offer sell : seller.getAllSellOffers()) {
if (sell.getCount() == 0) continue;
long count = Math.min(sell.getCount(), Math.min(cargo, (long) Math.floor(balance / sell.getPrice())));
long count = Order.getMaxCount(sell, balance, cargo);
LOG.trace("Sell offer {}, count = {}", sell, count);
if (count == 0) continue;
for (Vendor buyer : to.get()) {
@@ -109,7 +109,7 @@ public class MarketAnalyzer {
}
for (Offer sell : from.getAllSellOffers()) {
if (sell.getCount() == 0) continue;
long count = Math.min(sell.getCount(), Math.min(cargo, (long) Math.floor(balance / sell.getPrice())));
long count = Order.getMaxCount(sell, balance, cargo);
LOG.trace("Sell offer {}, count = {}", sell, count);
if (count == 0) continue;

View File

@@ -19,7 +19,7 @@ public class Order implements Comparable<Order> {
public Order(Offer sell, Offer buy, long count) {
this.sell = sell;
this.buy = buy;
this.count = Math.min(Math.min(buy.getCount(), sell.getCount()), count);
this.count = getMaxCount(sell, buy, count);
this.profit = (buy.getPrice() - sell.getPrice()) * count;
}
@@ -32,7 +32,7 @@ public class Order implements Comparable<Order> {
}
public void setCount(long count){
this.count = Math.min(Math.min(buy.getCount(), sell.getCount()), count);
this.count = getMaxCount(sell, buy, count);
this.profit = (buy.getPrice() - sell.getPrice()) * count;
}
@@ -110,6 +110,24 @@ public class Order implements Comparable<Order> {
}
public void setMax(double balance, long limit) {
setCount((long) Math.min(balance/sell.getPrice(), limit));
setCount(getMaxCount(sell, balance, limit));
}
public static long getMaxCount(Offer sell, double balance, long limit){
return getMaxCount(sell, null, balance, limit);
}
public static long getMaxCount(Offer sell, Offer buy, long limit){
return getMaxCount(sell, buy, Double.POSITIVE_INFINITY, limit);
}
public static long getMaxCount(Offer sell, Offer buy, double balance, long limit){
long supply = sell.getCount();
if (supply == 0) return 0;
if (supply == -1) supply = Long.MAX_VALUE;
long demand = buy != null ? buy.getCount() : -1;
if (demand <= 0) demand = Long.MAX_VALUE;
if (Double.isInfinite(balance)) return Math.min(limit, Math.min(supply, demand));
return (long) Math.min(limit, Math.min(Math.min(supply, demand), Math.floor(balance/sell.getPrice())));
}
}

View File

@@ -29,12 +29,12 @@ public class PathRouteTest extends Assert {
v1 = new SimpleVendor("v1",0,0,0);
v2 = new SimpleVendor("v2",0,0,0);
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, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400, 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, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -70,12 +70,12 @@ public class PathRouteTest extends Assert {
v2 = new SimpleVendor("v2",0,0,0);
v3 = new SimpleVendor("v3",0,0,0);
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100, 1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400, 1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 100, -1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 300, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 350, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 400, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -118,16 +118,16 @@ public class PathRouteTest extends Assert {
v3 = new SimpleVendor("v3",0,0,0);
v4 = new SimpleVendor("v4",0,0,0);
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, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, 1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, 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, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, -1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, 1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, -1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -182,16 +182,16 @@ public class PathRouteTest extends Assert {
v4 = new SimpleVendor("v4",0,0,0);
v5 = new SimpleVendor("v5",0,0,0);
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 410, 1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, 1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 270, 1));
v4.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 300, 1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 410, -1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 200, -1));
v1.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM2, 270, -1));
v4.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 470, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 300, 1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 370, 1));
v5.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 400, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 470, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 300, -1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 370, -1));
v5.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 400, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -254,16 +254,16 @@ public class PathRouteTest extends Assert {
v3 = new SimpleVendor("v3",0,0,0);
v4 = new SimpleVendor("v4",0,0,0);
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, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, 1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, 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, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, -1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, 1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, -1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -317,13 +317,13 @@ public class PathRouteTest extends Assert {
v1 = new SimpleVendor("v1",0,0,0);
v2 = new SimpleVendor("v2",0,0,0);
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, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, 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, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, -1));
PathRoute res = new PathRoute(new Vertex<>(v1.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v2.getPlace()), false);
@@ -337,10 +337,10 @@ public class PathRouteTest extends Assert {
v3 = new SimpleVendor("v3",0,0,0);
v4 = new SimpleVendor("v4",0,0,0);
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, 1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, 1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, -1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, -1));
PathRoute res = new PathRoute(new Vertex<>(v2.getPlace()));
res = (PathRoute) res.connectTo(new Vertex<>(v3.getPlace()), false);

View File

@@ -36,16 +36,16 @@ public class RouteGraphTest extends Assert {
v3 = new SimpleVendor("v3");
v4 = new SimpleVendor("v4");
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, ITEM3, 300, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, 1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, 1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, 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, ITEM3, 300, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM1, 150, -1));
v2.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 320, -1));
v3.add(new SimpleOffer(OFFER_TYPE.SELL, ITEM3, 390, -1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, 1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, 1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, 1));
v2.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM2, 225, -1));
v3.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM1, 200, -1));
v4.add(new SimpleOffer(OFFER_TYPE.BUY, ITEM3, 450, -1));
p1.add(v1);p2.add(v2);p3.add(v3);p4.add(v4);
market.add(p1);market.add(p2);market.add(p3);market.add(p4);