Skip to content

Commit cbca92b

Browse files
committed
More cleanup --- MarketData now initializes market
1 parent c2a44b9 commit cbca92b

23 files changed

+309
-534
lines changed

bazaarbot/Agent.hx

Lines changed: 9 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import bazaarbot.utils.EconNoun;
44
import bazaarbot.utils.Quick;
55
import openfl.Assets;
66
import openfl.geom.Point;
7-
import bazaarbot.agent.Inventory.InventoryData;
7+
import bazaarbot.agent.InventoryData;
88
import bazaarbot.agent.Logic;
99

1010
/**
1111
* ...
1212
* @author larsiusprime
1313
*/
14-
@:allow(BazaarBot)
14+
@:allow(Market)
1515
class Agent
1616
{
1717
public var id:Int; //unique integer identifier
@@ -64,7 +64,7 @@ class Agent
6464
}
6565

6666

67-
public function init(bazaar:BazaarBot):Void
67+
public function init(bazaar:Market):Void
6868
{
6969
var list_commodities = bazaar.getGoods_unsafe();
7070
for (str in list_commodities)
@@ -81,23 +81,23 @@ class Agent
8181
}
8282
}
8383

84-
public function generateOffers(bazaar:BazaarBot, good:String):Void
84+
public function generateOffers(bazaar:Market, good:String):Void
8585
{
8686
//no implemenation -- provide your own in a subclass
8787
}
8888

89-
public function updatePriceModel(bazaar:BazaarBot, act:String, good:String, success:Bool, unitPrice:Float = 0):Void
89+
public function updatePriceModel(bazaar:Market, act:String, good:String, success:Bool, unitPrice:Float = 0):Void
9090
{
9191
//no implementation -- provide your own in a subclass
9292
}
9393

94-
public function createBid(bazaar:BazaarBot, good:String, limit:Float):Offer
94+
public function createBid(bazaar:Market, good:String, limit:Float):Offer
9595
{
9696
//no implementation -- provide your own in a subclass
9797
return null;
9898
}
9999

100-
public function createAsk(bazaar:BazaarBot, commodity_:String, limit_:Float):Offer
100+
public function createAsk(bazaar:Market, commodity_:String, limit_:Float):Offer
101101
{
102102
//no implementation -- provide your own in a subclass
103103
return null;
@@ -113,45 +113,6 @@ class Agent
113113
_inventory.change(good, delta);
114114
}
115115

116-
/********STATIC*************/
117-
118-
public static function agentDataFromJSON(data:Dynamic, getLogic:String->Logic):AgentData
119-
{
120-
var agentData = {
121-
className:data.id,
122-
money:data.money,
123-
inventory:
124-
{
125-
maxSize: data.inventory.max_size,
126-
ideal:new Map<String, Float>(),
127-
start:new Map<String, Float>(),
128-
size:new Map<String, Float>()
129-
},
130-
logic:getLogic(data.logic)
131-
}
132-
133-
var inventory_ideal_ids = Reflect.fields(data.inventory.ideal);
134-
for (istr in inventory_ideal_ids)
135-
{
136-
agentData.inventory.ideal.set(istr, Reflect.field(data.inventory.ideal, istr));
137-
}
138-
139-
var inventory_start_ids = Reflect.fields(data.inventory.start);
140-
for (istr in inventory_start_ids)
141-
{
142-
agentData.inventory.start.set(istr, Reflect.field(data.inventory.start, istr));
143-
}
144-
145-
var inventory_size_ids = Reflect.fields(data.inventory.size);
146-
for (istr in inventory_size_ids)
147-
{
148-
agentData.inventory.size.set(istr, Reflect.field(data.inventory.size, istr));
149-
}
150-
151-
return agentData;
152-
}
153-
154-
155116
/********PRIVATE************/
156117

157118
private var _inventory:Inventory;
@@ -187,7 +148,7 @@ class Agent
187148
return Quick.randomRange(belief.x, belief.y);
188149
}
189150

190-
private function determineSaleQuantity(bazaar:BazaarBot, commodity_:String):Float
151+
private function determineSaleQuantity(bazaar:Market, commodity_:String):Float
191152
{
192153
var mean:Float = bazaar.getAverageHistoricalPrice(commodity_,_lookback);
193154
var trading_range:Point = observeTradingRange(commodity_);
@@ -206,7 +167,7 @@ class Agent
206167
return 0;
207168
}
208169

209-
private function determinePurchaseQuantity(bazaar:BazaarBot, commodity_:String):Float
170+
private function determinePurchaseQuantity(bazaar:Market, commodity_:String):Float
210171
{
211172
var mean:Float = bazaar.getAverageHistoricalPrice(commodity_,_lookback);
212173
var trading_range:Point = observeTradingRange(commodity_);

bazaarbot/Economy.hx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,29 @@ package bazaarbot;
44
* ...
55
* @author larsiusprime
66
*/
7+
78
class Economy
89
{
910
public function new()
1011
{
1112

1213
}
1314

15+
public function addMarket(m:Market)
16+
{
17+
if (_markets.indexOf(m) == -1)
18+
{
19+
_markets.push(m);
20+
}
21+
}
22+
23+
public function simulate(i:Int)
24+
{
25+
for (m in _markets)
26+
{
27+
m.simulate(rounds);
28+
}
29+
}
30+
31+
private var _markets:Array<Market>;
1432
}

bazaarbot/BazaarBot.hx renamed to bazaarbot/Market.hx

Lines changed: 23 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import openfl.Assets;
1818
* ...
1919
* @author
2020
*/
21-
class BazaarBot
21+
class Market
2222
{
2323
/**Logs information about all economic activity in this market**/
2424
public var history:History;
@@ -33,11 +33,16 @@ class BazaarBot
3333
_mapAgents = new Map<String, AgentData>();
3434
}
3535

36-
public function init(data:Dynamic, getLogic:String->Logic):Void
36+
public function init(data:MarketData):Void
3737
{
38-
fromJSON(data, getLogic);
38+
fromData(data);
3939
}
4040

41+
/*public function init(data:Dynamic, getLogic:String->Logic):Void
42+
{
43+
fromJSON(data, getLogic);
44+
}*/
45+
4146
public function numTypesOfGood():Int
4247
{
4348
return _goodTypes.length;
@@ -240,86 +245,10 @@ class BazaarBot
240245
private var _mapAgentLogic:Map<String, Logic>;
241246
private var _mapGoods:Map<String, Good>;
242247

243-
private function fromData(data:BazaarBotData)
244-
{
245-
/*
246-
var list:Array<Good> = data.goods;
247-
for (g in list)
248-
{
249-
_goodTypes.push(g.id);
250-
_mapGoods.set(g.id, new Good(g.id, g.size));
251-
252-
history.register(g.id);
253-
history.prices.add(g.id, 1.0); //start the bidding at $1!
254-
history.asks.add(g.id, 1.0); //start history charts with 1 fake buy/sell bid
255-
history.bids.add(g.id, 1.0);
256-
history.trades.add(g.id, 1.0);
257-
258-
_book.register(g.id);
259-
}
260-
261-
var tempAgents:Array<AgentClass> = data.agents;
262-
for (a in tempAgents)
263-
{
264-
//a.inventory.size
265-
for (key in _mapGoods.keys())
266-
{
267-
var g = _mapGoods.get(key);
268-
a.
269-
}
270-
}
271-
272-
273-
//Create agent classes
274-
var temp_agents:Array<Dynamic> = data.agents;
275-
_mapAgents = new Map<String, AgentClass>();
276-
for (a in temp_agents)
277-
{
278-
a.inventory.size = { };
279-
for (key in _mapGoods.keys())
280-
{
281-
var c:Good = _mapGoods.get(key);
282-
Reflect.setField(a.inventory.size, c.id, c.size);
283-
}
284-
var ac:AgentClass = new AgentClass(a);
285-
_mapAgents.set(ac.id, ac);
286-
287-
history.profit.register(ac.id);
288-
}
289-
290-
//Make the agent list
291-
_agents = new Array<Agent>();
292-
293-
//Get start conditions
294-
var start_conditions:Dynamic = data.start_conditions;
295-
var starts:Array<Dynamic> = Reflect.fields(start_conditions.agents);
296-
297-
var agent_index:Int = 0;
298-
//Make given number of each agent type
299-
300-
for (class_str in starts)
301-
{
302-
var val:Int = Reflect.field(start_conditions.agents, class_str);
303-
var agent_class = _mapAgents.get(class_str);
304-
var inv:Inventory = agent_class.getStartInventory();
305-
var money:Float = agent_class.money;
306-
307-
for (i in 0...val)
308-
{
309-
var a:Agent = new Agent(agent_index, class_str, inv.copy(), money);
310-
a.init(this);
311-
_agents.push(a);
312-
agent_index++;
313-
}
314-
}
315-
*/
316-
}
317-
318-
private function fromJSON(data:Dynamic, getLogic:String->Logic):Void
248+
private function fromData(data:MarketData)
319249
{
320250
//Create commodity index
321-
var list:Array<Dynamic> = data.commodities;
322-
for (g in list)
251+
for (g in data.goods)
323252
{
324253
_goodTypes.push(g.id);
325254
_mapGoods.set(g.id, new Good(g.id, g.size));
@@ -333,47 +262,26 @@ class BazaarBot
333262
_book.register(g.id);
334263
}
335264

336-
//Create agent classes
337-
var temp_agents:Array<Dynamic> = data.agents;
338265
_mapAgents = new Map<String, AgentData>();
339266

340-
for (a in temp_agents)
267+
for (aData in data.agentTypes)
341268
{
342-
a.inventory.size = { };
343-
for (key in _mapGoods.keys())
344-
{
345-
var c:Good = _mapGoods.get(key);
346-
Reflect.setField(a.inventory.size, c.id, c.size);
347-
}
348-
var agentData:AgentData = Agent.agentDataFromJSON(a, getLogic);
349-
_mapAgents.set(agentData.className, agentData);
350-
351-
history.profit.register(agentData.className);
269+
_mapAgents.set(aData.className, aData);
270+
history.profit.register(aData.className);
352271
}
353272

354273
//Make the agent list
355-
_agents = new Array<Agent>();
274+
_agents = [];
356275

357-
//Get start conditions
358-
var start_conditions:Dynamic = data.start_conditions;
359-
var starts:Array<Dynamic> = Reflect.fields(start_conditions.agents);
360-
361-
var agentIndex:Int = 0;
362-
//Make given number of each agent type
363-
364-
for (class_str in starts)
276+
var agentIndex = 0;
277+
for (agent in data.agents)
365278
{
366-
var val:Int = Reflect.field(start_conditions.agents, class_str);
367-
var agentData = _mapAgents.get(class_str);
368-
369-
for (i in 0...val)
370-
{
371-
var a:Agent = new AgentHScript(agentIndex, agentData);
372-
a.init(this);
373-
_agents.push(a);
374-
agentIndex++;
375-
}
279+
agent.id = agentIndex;
280+
agent.init(this);
281+
_agents.push(agent);
282+
agentIndex++;
376283
}
284+
377285
}
378286

379287
private function getAgentClassThatMakesMost(good:String):String
@@ -585,6 +493,8 @@ class BazaarBot
585493
var list:Array<Float> = null;
586494
var avg_profit:Float = 0;
587495

496+
trace("_agents = " + _agents);
497+
588498
for (i in 0..._agents.length)
589499
{
590500
var a:Agent = _agents[i]; //get current agent
@@ -650,10 +560,4 @@ class BazaarBot
650560
buyer.money -= amount;
651561
}
652562

653-
}
654-
655-
typedef BazaarBotData = {
656-
657-
goods:Array<Good>
658-
659563
}

0 commit comments

Comments
 (0)