我试图确定一种客观的方法,让一个自我利益的代理人在一个与Sugarscape (http://en.wikipedia.org/wiki/Sugarscape)相似的多agent模拟中,计算出最优的商品买卖价格。模拟结果如下:
每个代理都有一个储存的食物F,一个储存的钱G,一定数量的“能量”,E,和一个位置(x,y)在一个方格上。从一个正方形移动到一个相邻的正方形会消耗A个单位的能量,而能量自然是以模拟日B单位的速度消耗的。代理人每天都有下列可供选择的选择:消耗一单位食物以增加Q单位的能量;转移到另一地点(只要它有足够的能量),为食物“饲料”(消耗P单位能量以获得可能不知道数量的食物),或以双方都同意的价格与邻近的代理人进行交易。
每个agent的目标是使其“效用函数”U(E,F,G)最大化,而不考虑其他agent的效用函数。
现在,这似乎给出了食物的基本“使用价值”:Vuse = U(E + Q,F1,G) - U(E,F,G),但如果这是整个故事,这将不是一个有趣的问题。
似乎最普遍(但指数时间)的解决方案如下所示:
Function SearchActions(State S):
Add(consume food) to action set
Add(forage for food) to action set
For each other agent A
For each possible trading price P
Add(trade with A at price P) to action set
For each action X in action set
S' = Apply X to S
SearchActions(S')
Return optimal X
End function然而,主要的困难被“每一种可能的价格”所掩盖,因为代理A将购买/出售的价格本身取决于相同的计算方法。
我对这个值的计算要么取决于我自己可以从使用它得到什么,要么取决于其他人将为it...but支付什么--他们将为此支付什么--取决于我将为此支付什么。
你是怎么砍这个结的?
我知道这个问题已经解决了,before...but我找不到对它的任何引用,更不用说任何实际的实现了。我最近看到的是一篇关于SugarScape中的“战略规划”的论文,但它似乎只给出了计划的结果,而没有解释计划是如何完成的。
发布于 2014-03-03 20:22:46
关键是每个代理的开采成本。据推测,在任何特定的时间里,一些特工会比其他人更接近食物矿。
开采的成本是能源+时间。因此,离矿井越远的代理人的成本就越高,因为它必须花费更多的精力和时间才能到达那里。
每个代理商将需要根据自己目前的采矿成本和目前的能源、食品和货币存量来确定其最高购买价格。相反,每个代理商将需要根据这四个相同的因素来确定其最低销售价格。
当一家代理商的买入价格高于另一家代理商的销售价格时,交易就会发生。
那么你是如何定价的呢?就像我们人类一样。试图出售的代理商将以高于其最低销售价格的价格报价。试图购买的代理人将以低于其最低购买价格的价格提出购买建议。然后,双方将进行谈判,直到(或如果)达成双方都同意的价格。
发布于 2015-06-13 16:40:49
我有自己的Sugarscape实现,下面是我如何解决这个问题的方法。我的源代码实现可以在http://sugarscape.sourceforge.net/上找到。注意,实现需要JRE安装才能在浏览器中运行。或者,您可以使用Jave AppletViewer在本地运行它。
以下是我根据我的实现对这个问题的看法。代理商有两种食物来源,糖和香料。他们也有消费要求(新陈代谢)对这两个项目。一个内部价值是由每个代理根据他们当前股票的多少周期来决定的。因此,如果代理具有以下基值,
Agent x has 15 units of sugar and needs to consume 3 sugar units to survive each cycle.
Agent x has 30 units of spice and needs to consume 2 spice units to survive each cycle.他们的计算如下所述,
Sugar Metabolic Rate (SuM) = 15 / 3 = 5.
Spice Metabolic Rate (SpM) = 30 / 2 = 15.
Time Until Death = Minimum of (SuM, SpM)
Marginal Rate of Substitution (MRS) = SpM / SuM...MRS结果小于1表示对香料的偏好,而大于1的结果则表示对糖的偏好。
计算盈余:
if( MRS > 1 )
{ surplus = SpiceStocks - (SpiceMetabolism * TUD);
//If surplus <= metabolism Then Set surplus to Zero
surplus = surplus > (SpiceMetabolism * 2) ? surplus : 0;
}
else if( MRS < 1 )
{ surplus = SugarStocks - (SugarMetabolism * TUD);
//If surplus <= metabolism Then Set surplus to Zero
surplus = surplus > (SugarMetabolism * 2) ? surplus : 0;
}
else
surplus = 0; //MRS == 1, 一旦确定了这些计算,就会通过检查相邻的单元格来构造潜在贸易伙伴的列表。
名单是按代理人与每个贸易伙伴之间的差距进行排序的。
一笔交易是与我们的代理人有最大的差距的贸易伙伴的消费。在每个周期内,可以允许在可用盈余被消耗之前进行多种交易。
在代理人与贸易伙伴之间的2项盈余中,拟交易的盈余较低。
BarterPrice = Squareroot( Agent MRS * Trading Partner MRS );我知道这个答案有点晚,但我希望它能帮助下一个人实现这个奇妙的模拟。
https://softwareengineering.stackexchange.com/questions/231010
复制相似问题