需要帮助最大化多个相似对象中的3个因素并进行适当排序

use*_*327 5 ruby arrays algorithm math ruby-on-rails

我需要用任何语言编写算法,根据3个因素对数组进行排序.我以度假村为例(如Hipmunk).假设我想去度假.我想要最便宜的地方,最好的评论和最吸引人的地方.但是,显然我无法在所有3中找到#1.

示例(假设有20个重要景点):

度假村 - 答:150美元/晚... 98/100在有利的评论... 20个景点中的18个
度假村B:99美元/晚... 85/100在有利的评论... 20个景点中的12个
度假村C:120美元/晚... 91/100在好评... 20个景点中的16个

度假村B看起来价格最具吸引力,但在其他两个类别中排名第三.其中,我可以选择度假村C,每晚只需21美元,并获得更多的景点和更好的评论.价格对我来说仍然很重要,但是A度假村拥有出色的评价和众多景点:价值51美元的奢侈品值多少钱吗?

我希望能够填充一个列表,该列表将从"从最好到最差"点亮(我引用bc对消费者来说是主观的).我将如何最大化每个度假村的价值?

  • 我应该为每个因素(即:55%的价格,30%的评论,15%的设施)加权,并得出一组数字的结果并按照这种方式订购?
  • 我是否需要所有酒店的模式,中位数和范围并确定平均价格,并且平均价格附近的酒店是否保持最重?

如果有点混乱,请访问www.hipmunk.com.他们有一种飞机排序,他们称之为痛苦(和我的问题类似的酒店类型),他们将其作为自己使用.我以度假村为例让我的问题更有意义.如何将数学运用于这样的问题?

drz*_*aus 10

我正打算提出关于多因素加权排序的相同问题,因为我的研究只提出了双因素排序的答案(例如解释公式).

尽管我们都在询问3个因素,但我会列出我发现的可能性,以防它们有用.

可能性:

注意:S是"排序分数",这是你要排序的(asc或desc).

  1. "线性加权" - 使用如下函数:,其中任意指定权重,并且是因子的值.你也想要标准化(即).S = (w1 * F1) + (w2 * F2) + (w3 * F3)wxFxFFx_n = Fx / Fmax
  2. "Base-N加权" - 更像是分组而不是加权,它只是一个线性加权,其中权重增加了基数10的倍数(与CSS选择器特异性相似的原则),因此更重要的因素显着更高: .S = 1000 * F1 + 100 * F2 ...
  3. 估计真实价值(ETV) - 这显然是谷歌分析在他们的报告中引入的,其中一个因素的价值影响(权重)另一个因素 - 后果是对更"统计上显着"的价值进行排序.链接解释得非常好,所以这里只是等式: ,"更重要"因素(文章中的"跳出率")在哪里,是"重要性修改"因素(文章中的"访问").S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)F1F2
  4. 贝叶斯估计 - 看起来与ETV非常相似,这就是IMDb计算其评级的方式.有关说明,请参阅此StackOverflow帖子 ; 等式:,其中与#3相同,并且是"重要性"因子的最小阈值限制(即不应考虑任何小于X的值).S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avgFxF2_lim

选项#3和#4看起来很有前途,因为你不必像在#1和#2中那样选择任意加权方案,但问题是你如何做到这两个因素呢?

在你的情况下,在#1中分配权重可能没问题.您需要根据用户认为更重要的内容微调算法 - 您可以将权重公开为过滤器(如1-10下拉菜单),以便用户可以即时调整其搜索.或者如果你想变得聪明,你可以在搜索之前对用户进行轮询("哪个对你更重要?")然后根据响应分配权重集,并且在跟踪足够的民意调查后你可以自动提出加权方案基于大多数回复.wx

希望能让你走上正轨.


saw*_*awa 0

拥有可变的权重,并让用户通过一些输入(如杠杆)来调整权重,以便动态更新排序顺序怎么样?