From 7d506625bded106552f3f9749b9bb02f40a02da6 Mon Sep 17 00:00:00 2001 From: Manuel Plonski Date: Tue, 4 Jul 2023 09:08:25 +0200 Subject: [PATCH] this shit is it --- db/production.yml | 6 ++-- econ/__pycache__/exchange.cpython-310.pyc | Bin 7972 -> 7970 bytes econ/__pycache__/simulation.cpython-310.pyc | Bin 8466 -> 8510 bytes .../base_aquire_agent.cpython-310.pyc | Bin 4785 -> 4798 bytes .../base_distribution_agent.cpython-310.pyc | Bin 5069 -> 5069 bytes .../price_believe_aquire.cpython-310.pyc | Bin 4695 -> 4759 bytes .../price_believe_distribute.cpython-310.pyc | Bin 4844 -> 4907 bytes econ/agents/base_aquire_agent.py | 1 + econ/agents/base_distribution_agent.py | 2 ++ econ/agents/price_believe_aquire.py | 8 +++-- econ/agents/price_believe_distribute.py | 34 +++++++++--------- econ/business/Price_Believe_Business.py | 10 ++++-- .../Price_Believe_Business.cpython-310.pyc | Bin 4169 -> 4280 bytes econ/exchange.py | 13 +++---- econ/simulation.py | 3 ++ 15 files changed, 45 insertions(+), 32 deletions(-) diff --git a/db/production.yml b/db/production.yml index a4f40f2..890055e 100644 --- a/db/production.yml +++ b/db/production.yml @@ -6,7 +6,7 @@ spec: prod: Raw_Agriculture_Plot: 1 - name: Fruit - amount: 1000 + amount: 100 prod: Raw_Agriculture_Plot: 1 # - name: Wood @@ -20,10 +20,10 @@ spec: # Wood: 1 - name: Food - amount: 50 + amount: 100 prod: # Fuel: 1 - Fruit: 1 +# Fruit: 1 Grain: 2 diff --git a/econ/__pycache__/exchange.cpython-310.pyc b/econ/__pycache__/exchange.cpython-310.pyc index 07df5ba86ee99a85322f8c3f178d35656b8a2240..b1cd64998dd1055596e0b7c07be0ecebe1657064 100644 GIT binary patch delta 823 zcmZ9K&ubG=5XX12o6V0+nyhIy$u>VMT4@wS2-+IknA%^|dJxpM#>SYq5z^9Hp8+jw z@t`M9!W_KVgS8iLO2C5`6$B50!QQMVZ$0Qi|A9KQ4Hevl&wSta&3m&u?`;+~3c=gK zpkJcr$L@wzdmS{i{2LnC@|xNtK7=*73ARE}v1JPuB@wncXHP zoQh+t#u+h2o{=DItJRg2`m!a?vD3|tzbUF#y>ho<)rHKi^YwkKPB7vOlaN(Ki1h@c zpD{!zh3fZlGm>>r(%@5TEAklNJeH$#?$c!aYQ2q~0tn)7V+p3P5*q*mpTk^X!xvPB)z>g~nWjgxEGURnyv9wIC{{sZF!Z21!fO@Um2q z1P}G(Ntjy|5s98WSaKGjLQj66;3Xj51hF8Bcog4+Q1|eg|NFmrGmkg>B;86o)*TL; zz`u>pkMyx^hgV6w;H!qYDI1)d&@?y9I;;uIuA43k1~kNm`JkYiH%(1TLo!UO<~0*L zj7v%cVt7Yc1`)p~AEj?5UIn-9dyXM4M2i)yAe#Ey&mF%&PI8N-u;rXkMoFd#lla|P zmdMVnc?f@il!#$|X(C!G~BtCW@mu9)#ZGUp#12~TbPgWY| z#$NlSCkbH3-`)z$;fn7BcyP;?Igq7;-3tHfS2OpOgI^Bu8xtE_h{rCPbZu9tF>Q8!Ap zj$E$R4OU^irGP)xh;oVUafpz>P~e#R0+-Q#=H#IxR<%lr=mZzr76wOShusS+nH&UlEO diff --git a/econ/__pycache__/simulation.cpython-310.pyc b/econ/__pycache__/simulation.cpython-310.pyc index e0d151be88d6241a6648eb0eaf8e453ee7c0a0b7..8ecbbd57bee42e8aa2ba39c08f2e04229a00eafe 100644 GIT binary patch delta 2392 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 diff --git a/econ/agents/__pycache__/base_aquire_agent.cpython-310.pyc b/econ/agents/__pycache__/base_aquire_agent.cpython-310.pyc index 4eebc45cdc7419647bc87322411f1d052c279deb..698aba8289c05031acc78a65ade97b93e07bbf25 100644 GIT binary patch delta 92 zcmdm}x=)oipO=@50SGGgEK1q8k$1O%u^f<>!dSx)41!kpO=@50SKxL=BCWw$h%uWLjuT4VXR?@XGmuNl8hxx%?t~eYZw0sz_U5g7mg diff --git a/econ/agents/__pycache__/base_distribution_agent.cpython-310.pyc b/econ/agents/__pycache__/base_distribution_agent.cpython-310.pyc index 3ea6b7b4cc2c2d7b079efb49b2985e60a7834604..faf9622f73809de2defe701f0d7d18449b7c0b10 100644 GIT binary patch delta 606 zcmZ9K%P#{_6viFeQ5{qDtOfOGq^3wM5bp#L@v5*8yQXRuO-k!d2_g{-dvSIW2{t0J zktWt8wp~c9W@pL9#vkB*w<2Pa`^&lKeCKsDg>WHkWDLVwBEPBk>y4{>qt`_akGsyO zonKs^6v{uj4bnnVAUgA}+Ac}gyeCH#;m3*@3bDt#M(%vV>m!PCRu9$;ORZTZRLTJI z`uI}srWhCWo53OJh?$zu5f}lYz$j1$L?ldCF}og)pAvVKJ+zj0Dg|lHa5wRaZ{4q& zOyb_JwEXOgQi8vH#~n)5BE7d%tY$!=;Fp$Dww>GG;q$7A(K!U>CCpOM1Um>U0RM8d z)K)UHY3(5tlQ;-2mortR%w}T5#kU3Djo7f^+il6)TAmw zb%(5&&?YU%EiBv0$ylBUa?~gu83jkJ=IF0>Xd^^Z%+b@o;mRLp<^&BG}Po@*LowU;Fc>K>}sOES@fnP_H$Hx4gl7>}UO0BP delta 606 zcmZ9KO-mb56ox$}8Iw#VO_TZo(Nu#roi>eyDvcV2fMBaOs0)#9hJ4H-kT&U^5Qv*n z`Uk|b6I!|x!Hoo5Tj(|m!PU5OsT()`fZq3}6mj4_oO{lDzAn>EbyG&&FoJ#ZyT1Hc z**Gy?d+8%DdG~38&%L*l?ELl_q$Q<5q&gQ`i==DK-y|~mEU-dJ_6K*!(X@A ziRhfvnjWE2W|8-Xf9Yvj=dOO3%}PhX)P#<}JdgnvfG2<{VS0PngK+#SaU6O@+Z{I~ zNE?Ma&RgM9L^a9dKBKh!Cp=9S--W+TDOEyxkEmD8fI=Z6E!Xp<*>?EgQ9kz`fmI2! zU&LXL0c*g69Ig7fT>oUZ5c(joo8T*bgr_5WFAMOk1IvIaf$m}$P$NE-mgy5ozKLwp zF6STrC@6)RR3)hHko6MArRDmB?buB@8g_LD>_*k8S8Oo})&Fh8ro4XVbhPw!0)ZF6 zGvGOp2HpZWU=esH;rbh*-mpcp-5Xskv4JS+xrSwxYemN?+qIfy-Fpnx9Iq(w>uB;g S*u>vA)XzpNK!ZFSJN*l8iFPCa diff --git a/econ/agents/__pycache__/price_believe_aquire.cpython-310.pyc b/econ/agents/__pycache__/price_believe_aquire.cpython-310.pyc index ed68de6942a7f10ef6002a156813eed911e2a1c1..0f892d1387dfb3745316f701461e77c440bfc038 100644 GIT binary patch delta 474 zcmW-Z%}X0m6vf}2Hxnm$j!sn6Mznt8h_2!XDy_zdb>%`qPy`9gMB`WV=|&lG=RRI( zHwsDr070@6T)T3ukewT`i_%pWr4)K^9-JTdo_EfD>HXH{ZoNYgq!Q&a~I;NbQB9XqN;CUo2PU$;BTAUH4?g$oUm}HrT;e58H$;g*8&JsWx5A8;)kBktX>i$3yAM59!fXXevCEmCn6EocIVe~TE m8B>f;`0VyW3jevS)&dz9n228~zODJ5Ucmc!3Kag0um1-x_ifPt delta 370 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.max_batch_qty: + # amount=self.max_batch_qty if not self.business.inventory[self.resource]>=amount: return False # we dont have enough balance diff --git a/econ/agents/price_believe_aquire.py b/econ/agents/price_believe_aquire.py index b308a90..eb6cda4 100644 --- a/econ/agents/price_believe_aquire.py +++ b/econ/agents/price_believe_aquire.py @@ -14,8 +14,8 @@ class Price_Believe_Aquire_Agent(Base_Aquire_Agent): self.price_believe = {i: 1 for i in range(len(self.exchanges))} self.open_orders = {i: [] for i in range(len(self.exchanges))} self.open_qty = 0 - self.hp_threshold=0.25 - self.lp_threshold=0.90 + self.hp_threshold=0.70 + self.lp_threshold=0.99 def tick(self, tick, episode): @@ -52,9 +52,11 @@ class Price_Believe_Aquire_Agent(Base_Aquire_Agent): return best_id def register_order(self, cx_id, order): + half=self.max_price_adj_rate/2 + ran=random.randrange(-half,half) self.open_orders[cx_id].append({ 'id': order.order_id, - 'lifetime': self.max_price_adj_rate, + 'lifetime': self.max_price_adj_rate+ran, 'leaves': order.leaves_qty }) if order.leaves_qty != order.qty: diff --git a/econ/agents/price_believe_distribute.py b/econ/agents/price_believe_distribute.py index 5007bf9..3d1365f 100644 --- a/econ/agents/price_believe_distribute.py +++ b/econ/agents/price_believe_distribute.py @@ -7,15 +7,16 @@ class Price_Believe_Distribiute_Agent(Base_Distribution_Agent): Aquire agent with internal price believe system. """ - def __init__(self, simulation, business, resource, exchanges: list, lr, max_price_adj_rate) -> None: + def __init__(self, simulation, business, resource, exchanges: list, lr,at_sales, max_price_adj_rate) -> None: super().__init__(simulation, business, resource, exchanges) self.lr = lr + self.lr_at_sales=at_sales self.max_price_adj_rate = max_price_adj_rate self.price_believe = {i: 1 for i in range(len(self.exchanges))} self.open_orders = {i: [] for i in range(len(self.exchanges))} self.open_qty = 0 - self.lp_threshold=0.10 - self.hp_threshold=0.90 + self.lp_threshold=0.05 + self.hp_threshold=0.80 def tick(self, step, episode): @@ -50,9 +51,11 @@ class Price_Believe_Distribiute_Agent(Base_Distribution_Agent): return best_id def register_order(self, cx_id, order): + half=self.max_price_adj_rate/2 + ran=random.randrange(-half,half) self.open_orders[cx_id].append({ 'id': order.order_id, - 'lifetime': self.max_price_adj_rate, + 'lifetime': self.max_price_adj_rate+ran, 'leaves': order.leaves_qty }) if order.leaves_qty != order.qty: @@ -80,7 +83,7 @@ class Price_Believe_Distribiute_Agent(Base_Distribution_Agent): modifier=1 elif succsess<=self.lp_threshold: modifier=-1 - self.update_believe(cx_id, modifier) # update price believe + self.update_believe(cx_id,o.price, succsess) # update price believe self.collect_balance_from_cxs() self.collect_resource_from_cxs(self.resource) self.update_trades() @@ -100,36 +103,33 @@ class Price_Believe_Distribiute_Agent(Base_Distribution_Agent): # timeout self.update_trades() succsess=self.calc_order_success(cx,o) - modifier=0 - if succsess>=self.hp_threshold: - modifier=1 - elif succsess<=self.lp_threshold: - modifier=-1 + cx.cancel_order(i["id"]) self.collect_balance_from_cxs() self.collect_resource_from_cxs(self.resource) - self.update_believe(cx_id, modifier) + self.update_believe(cx_id,o.price, succsess) self.open_orders[cx_id].remove(i) def calc_order_success(self,cx, o): """ Calculate how we should adjust the price belive """ sold = o.qty-o.leaves_qty - soldperc=sold/o.qty + nsold=min(o.leaves_qty,cx.total_demand[self.resource]) dem = cx.total_demand[self.resource]+sold if dem == 0: dem = 1 - coverage = sold/dem - base_success=max([coverage,soldperc]) - return base_success + score=sold-nsold + return score - def update_believe(self, cx_id, modifier): + def update_believe(self, cx_id, used_price, modifier): """ Updates the believe based on the modifier. If positive will add lr to believe If negative will sub lr to believe """ - self.price_believe[cx_id] += modifier*self.lr + + self.price_believe[cx_id]+=(modifier/self.lr_at_sales)*self.lr + self.price_believe[cx_id] = round(self.price_believe[cx_id], 2) if self.price_believe[cx_id] < 1: self.price_believe[cx_id] = 1 diff --git a/econ/business/Price_Believe_Business.py b/econ/business/Price_Believe_Business.py index 8bd3a22..2e81584 100644 --- a/econ/business/Price_Believe_Business.py +++ b/econ/business/Price_Believe_Business.py @@ -11,19 +11,21 @@ class Price_Believe_Business(Business): self.max_storage = 10 self.expense_per_unit = -1 + self.expense_per_prod=-1 self.income_per_unit = -1 self.distribute = Price_Believe_Distribiute_Agent( - simulation, self, production["name"], exchange, 0.2, 50) + simulation, self, production["name"], exchange, 0.2,production["amount"], 20) self.craft = AutoProductionAgent(simulation, self) self.aquire = {} for k, v in production["prod"].items(): a = Price_Believe_Aquire_Agent( - simulation, self, k, exchange, 0.2, 5) + simulation, self, k, exchange, 0.2, 20) a.set_target(v*2) a.set_price_max(10) self.aquire[k] = a self.distribute.set_price_min(0) + self.distribute.max_batch_qty=production["amount"] self.distribute.set_target(0) def tick_business_decisions(self, step): @@ -95,7 +97,7 @@ class Price_Believe_Business(Business): ExPerProd = agent.expense/covers experunit += ExPerProd/amount - + if qtyNewProds > 0: # confirm new units for key, agent in self.aquire.items(): @@ -116,6 +118,7 @@ class Price_Believe_Business(Business): estimatedQTYUnits = qtyNewUnits+self.resource_in_possesion() new_ex = ex_total/estimatedQTYUnits self.expense_per_unit = new_ex + self.expense_per_prod=self.expense_per_unit*amount def update_income_per_unit(self, step): qty_sold = self.distribute.qty @@ -140,6 +143,7 @@ class Price_Believe_Business(Business): data["tstep"] = step+episode*episode_length data["production"] = self.production["name"] data["expense"] = self.expense_per_unit + data["expense_prod"]=self.expense_per_prod data["income"] = self.income_per_unit data["inventory"] = self.inventory[self.production["name"]] data["retain"] = self.distribute.target diff --git a/econ/business/__pycache__/Price_Believe_Business.cpython-310.pyc b/econ/business/__pycache__/Price_Believe_Business.cpython-310.pyc index 057777abf6c3937ddbe0eaf3b86367d8a3ce90c6..deaacd4820cb06c79c3eedd5e59185dda14a86a6 100644 GIT binary patch delta 1325 zcmZuw-HY5*6wjSxlAF(+*-vL(JMP+cCbjFL+aki!1zQlbtgc0np*Bn>VVfbFOm8yM z+AMu&U-V5bJ}O(qKR_zQC&9;x{sVdIJ5BZ|a(uarHG%ZdR;Rcm95m_iy5QPEYx8=8ux7)4g&Lm3n zD40YdKo9vxBbghxhr>I;&0#UR72GcF%1!m>b{~S~ncmPDJ`J`kpQ$Ul!&>aCu58;Y zj~BEp))VfF15TPKF@!k)-w~%!UO`xuN%P|QB@`DBItZ^IEF-)M;M-yi{wggmqKR*em+B(5JyfnKzOhHV6B#v2HXf}`lHmz<1ujek5e*&rySck@5!3>k=g(6a z0~5O?rg&lE!j-GmWp-NLu&#Axu7_dg0QTU`ugE{G%c{;=(zCx?Ab#HkeWl0gC_9YA zl6+#Hdk47|=K%&BXbAEw3B?ZTP9waO`%Tc@lk?8^pVY;|XJt)O5go+PEm1cS8||w# zeblr6$y9lxB!l6*InCoV%JYZvUuU2FAotzR?`xsC1MH1qg~klmidM`boj%5Ou}S72 zIV71NxjRZ>jqPKn)NnJ1d2dg=h9w%&B+j!iqI*`&f+ouWOHKTHAPt-s`>;>zLKIv; zmrVqmC$SFTyOgpHq!Gq837TkfN1iLa9?<7u^18RaM?CMM(R*G^kVNT0ajPy$3x^Q% z65a2E`#13B7_2diad=wHW0rjC1;Z`Sifsg%7i_%14v9+$7+kqQFiM7bK8lhg2xju1 oK^NR?!2$5i=SlDwU*>(Tag}e%ujd}FVjgmuiKaUHve(-959byYCIA2c delta 1182 zcmZuwOKTHR6uvi^+_^JJCZVRb>C3iClhmr%R#B{qFGP^~D1roah?$|LrkV84RH{xX zQlVSnsyn3-TnKJTMf?l?h1t36N|!D@=guY+6Ye)>&Ybhjd3^I@?B}TEWwR!M-r6$5%nwN*PJ}pmQ9FjY% zZ+AgEK_??tTlQ94fyx#+-_l4Zm&+6NJe@=NN}Q~}Kc2>l3s2)zgc0F|^DgiECP zf!h{kX|m%J$RoxO#sR8kP!o%8aIe(}!~}X3l;k5eM2F=|_MMM_x1xzbc~&o{yF;4# z0KF!+^p~gcg;nmg-Il!)Jdcb<>zUgMJn>wWTcN6oZhDB1dgTi5r8nd}ze~%z9bTd{ z4p|@-eLiko6Z|w(HHB@7LXC)3&?V@e>p!1P*}5?@@+Dd4ZR?#*=(X{>{A}Kpqv;m945Q I$@ls3e?aH!ssI20 diff --git a/econ/exchange.py b/econ/exchange.py index c0ab438..97cc6f4 100644 --- a/econ/exchange.py +++ b/econ/exchange.py @@ -127,10 +127,11 @@ class Exchange(): # calculate price for complete order fullfilment prev=amount amount=int(amount) + price=round(price) if amount<1: # invalid order return None - full_price=round(price*amount,2) + full_price=round(price*amount) # Move resources into escrow @@ -294,11 +295,11 @@ class Exchange(): #data["step"]=step data["tstep"]=timepoint data["instrm"]=instrm - data["best_ask"]=0 - data["best_bid"]=0 - data["total_demand"]=0 - data["total_supply"]=0 - data["market_rate"]=0 + data["best_ask"]=None + data["best_bid"]=None + data["total_demand"]=None + data["total_supply"]=None + data["market_rate"]=None localStepDB[instrm]=data ## add best ask/best bid diff --git a/econ/simulation.py b/econ/simulation.py index 7439f45..dc3785e 100644 --- a/econ/simulation.py +++ b/econ/simulation.py @@ -21,6 +21,7 @@ class Simulation(): self.populated_cells={} self.businesses=[] self.production_util={} + self.episode_tax=1 self.taskpool=ThreadPoolExecutor() self.setup_timing(["dss","dsa","dab","dbl","dt"]) @@ -113,6 +114,8 @@ class Simulation(): cell.setup_supply_for_episode() toclose=[] for b in self.businesses: + #tax business + b.balance-=self.episode_tax b.tick_episode(self.episode_count) if b.balance<=0: toclose.append(b.id)