2017-07-24 37 views
1

我需要编写一些代码,可以计算出一个变量,显示消费者为他的笔记本电脑购买组件的偏好。偏好通过税收(T)以及价格对人们购买的重要性(PriceI)进行更改。我需要包括TPriceI以查找该人购买笔记本电脑的意愿(W)。从50 Cent$6范围内的滑动税变化。我想将变量W保留在1 to 2的范围内,其中1是税款处于其默认值时的最小值,即最小值为50 cent寻找一个逻辑保持在一个范围内的分数

所以有2 variables那些对W影响:

50<T<600 
0.6 < PriceI < 9 

因为我想1<W<2,我认为它应该工作,如果我第一次通过将它们除以他们的最大正常化的所有数据,然后才能找到一小部分是1和2之间,我提出的分子为小于4和分母为小于2,希望能有在1至2的结果:

to setup-WCalculator 
ask consumers [ 
set PP ((PriceI/9) * 2) 
    set TT ((T/600) * 4) 
    set W TT/PP 
] 

end 

然而,的NetLogo使得无论PPTT零,而他们应该是一个小的值,如0.15!发现W的逻辑是否合理? 谢谢,

+0

由于使用的NetLogo浮点所有数值和计算,我不看你怎么可以从获得零'((PriceI/9)* 2'除非'PriceI'确实为零。你检查过吗? – Charles

+0

正如您所讨论的那样,问题不在于netlogo处理数字的方式。这些变量也是在程序中给出的值。我已经定义了一个程序'setup-WCalculator',而在另一个程序中,我使用'W'。看起来它不是这样工作的,因为它不能进入​​该过程,所以默认零使它们为零。我所做的工作就是我在使用'W'的其他程序之前调用了'setup-WCalculator'。它现在似乎在工作。我没有注意到这种正常化你提到的方式,并使用它,使结果得到改善。谢谢。 – user710

回答

3

规范化通常与式进行,例如

TT = (T - Tmin)/(Tmax - Tmin) 

或这里

TT = (T - 50)/(600 - 50) 

这使0和1之间的归一化值为T 50和600。如果之间的范围你想TTT的范围在1和x之间,其中x是> 1,那么你可以设置

TTT = 1.0 + TT * (x - 1.0) 

所以

TTT = 1.0 + TT * (4.0 - 1.0) = 1.0 + TT * 3.0 

会给你一个值1和4

HTH之间

+0

你的回答是这个问题是错误的,他不能得到零?在回答之前,评论确认这可能是个好主意。 – Patrick87

+0

是的。这应该是一个评论和正常化的答案。我已经编辑了相应的回应。谢谢。 – Charles