2016-07-14 99 views
1

这个问题在理论上更实用。我的补丁有变量timber_valueharvest_costNetLogo:可以一次选择多个标准的补丁吗?

请问NetLogo是如何在一个“询问”中同时选择最大木材价值和最低收获成本的补丁? 我想这可以通过添加变量differencedifference = timber_value - harvest_cost)并简单地通过ask max-one-of patches [difference]选择修补程序来解决。

但是,我想知道是否有另一种方法同时考虑两个变量(timber_value和harvest_cost)?

我真的不能想出更好的办法,则一个描述...

谢谢你的知识共享和讨论!

+4

为什么不直接使用ask max-one-of patches [timber_value - harvest_cost]? – mattsap

+0

我真的很喜欢这个解决方案:)它仍然在寻找差异,但它更加优雅; -D – maycca

回答

2

一般来说,答案是否定的,但这与NetLogo无关。要查看问题,请为这两个属性创建有序的值对。假设你得到[2 1]和[1 2]。你想如何比较它们?也就是说,您可以获得最大的木材价值补丁,然后获得最低的收获成本补丁。

patches-own [x y] 

to test 
    ca 
    ask patches [ 
    set x random-float 1 
    set y random-float 1 
    ] 
    show map [[list x y] of ?] 
    sublist 
    sort-by compare patches 
    0 10 
end 

to-report compare [#p1 #p2] 
    let _x1 [x] of #p1 
    let _x2 [x] of #p2 
    let _y1 [y] of #p1 
    let _y2 [y] of #p2 
    report (_x1 < _x2) or (_x1 = _x2 and _y1 < _y2) 
end 

另一方面,看起来在这种情况下,你会更好地按利润总额排序。由于这只是一个实数,所以这些排序问题都不会出现。

+0

不是一般情况下只是加权绝对差异? w1 * _x1 - w2 * _x2?其中w1是x1重要性的权重,w2是x2的权重? – mattsap

+0

@mattsap不,这不同于字典顺序。然而,它比简单的利润最大化(这是我在我的回答结束时建议的)更普遍。 – Alan