我使用多项式 Logit 模型作为概率函数来对一组特定代理的选择进行建模,当我计算出 P1、P2 和 P3 的概率以及如何使用它们来实际建模时,我的问题就出现了选择。我的想法是使用模型库中的彩票中奖示例之类的东西,但问题是,在这种情况下,概率并未设置,而是针对每个刻度进行更改,即使 P1 发生的机会最低,但它在下一次迭代。
感谢您的帮助。
附:对于每种情况,多项式 Logit 的等式为 P{ik}= {exp(utilityik) \sum exp(utilityjk)}。
to flightchoice-business
let flight-time1 mean [time1] of airline1
let airfare-airline1 mean [airfare] of airline1
set beta1 .8
set beta2 .2
set utility1 beta1 * (airfare-airline1) + beta2 * abs((time - flight-time1) * 10)
let flight-time2 mean [time1] of airline2
let airfare-airline2 mean [airfare] of airline2
set beta1 .8
set beta2 .2
set utility2 beta1 * (airfare-airline2) + beta2 * abs((time - flight-time2) * 10)
let flight-time3 mean [time1] of airline3
let airfare-airline3 mean [airfare] of airline3
set beta1 .8
set beta2 .2
set utility3 beta1 * (airfare-airline3) + beta2 * abs((time - flight-time3) * 10)
let cumulsum exp(utility1) + exp(utility2) + exp(utility3)
let P1 exp(utility1) / cumulsum
let P2 exp(utility2) / cumulsum
let P3 exp(utility3) / cumulsum
let buy random-float P1 + P2 + P3
end
你走在正确的轨道上。您的代码应继续如下:
...
let buy random-float P1 + P2 + P3
ifelse buy < P1 [
do-stuff-with-P1
] [
ifelse buy < P1 + P2 [
do-stuff-with-P2
] [
do-stuff-with-P3
]
]
您可以使用一个带有列表的函数来概括这一点,在我看来,它更好一些:
to-report weighted-random [ weights ]
let pick random-float sum weights
let total 0
let i 0
foreach weights [
set total total + ?
if pick < total [ report i ]
set i i + 1
]
end
您可以按如下方式使用它:
let buy weighted-random (list P1 P2 P3)
if buy = 0 [ do-stuff-with-P1 ]
if buy = 1 [ do-stuff-with-P2 ]
if buy = 2 [ do-stuff-with-P3 ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)