如何根据项目重要性动态分配权重


How can I assign weights based on item importance dynamically?

我正试图找到一种方法,可以用来构建一个系统,根据表中独立对象的重要性,为其分配权重,进行随机加权排序。例如,如果小数位数为0-9。如果你分配了四个项目3、5、9、1,那么系统将能够对这些数字进行排序,并构建列表,使四个对象之间的每个权重加起来总共为1。你将如何对这些物品进行分类?

目前,这就是我对SQL的看法:

CREATE TABLE IF NOT EXISTS `block_types` (
    `ID` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    `BlockTypeUID` varchar(35),
    `Name` varchar(20),
    `Weight` float,
    `Turns` int(11),
    `Score` int(11),
    `Hitpoints` int(20),
    `Rarity` int(11),
    `Multiplier` int(1),
    `Effect` int(11),
    `Area` int(11),
    PRIMARY KEY (`ID`)
) DEFAULT COLLATE=utf8_general_ci;

权重是从0.0001到1的浮动,目前我基本上是通过一个简单的输入表单手动分配它。其想法是,Rarity将处理0-9的存储,并用于根据所有其他条目自动计算新的权重,这样表的总和就等于1。

编辑:我阅读了您问题的底部。

这个稍微混乱的查询使表中的所有权重字段根据稀有程度按比例加起来为1。(可能更像.9999999999 8)

UPDATE block_types SET Weight=Rarity/(SELECT SUM(Rarity) AS r FROM (SELECT Rarity FROM block_types) AS bt);

例如,如果有两行,一行的稀有度为40,另一行的罕见度为80,那么最终的重量分别为.3333和.6666(40是120的1/3,80是2/3)。

希望能有所帮助。