求一个最大值解法
資深大佬 : andersonGzy 5
每个装备只能选一个属性,即一行只能有一个属性。
每列可以有多个属性,也可以没有属性。
每列上的数据先相加。
每列相加之和各自加底数 1 之后再相乘。
求最终最大值。 [穷举太慢,自己写的逻辑算出来 2.139 ,还不到最大]
大佬有話說 (27)
每个装备只能选一个属性,即一行只能有一个属性。
每列可以有多个属性,也可以没有属性。
每列上的数据先相加。
每列相加之和各自加底数 1 之后再相乘。
求最终最大值。 [穷举太慢,自己写的逻辑算出来 2.139 ,还不到最大]
用启发式爬坡算法
先预设一个初始选择。
第一层死循环;第二层循环每件装备,尝试重选;如果某轮循环中重新选取后不发生改变,则认为最优
但可能实际上有局部最优,可以随机生成若干个初始选择,或者用把爬坡改退火
……
但我想了想,6**8 也不过 167 万,太慢是不是干了什么诡异的或者多余的操作?
8 个装备定为 1-8 号。六种属性分别定为 a,b,c,d,e,f,。然后将他们组合,得到 a1, a2,…,b1, b2,…,f8,一共 48 个变量
每个变量值只能取 0 或 1
例如,用 a1 这个变量表示装备 1 是否选择 “力智” 这个属性。a1=1 表示装备 1 选择力智属性,a1=0 表示装备 1 不选择力智属性。
最终求解的就是 ( a1*0.169 + a2*0.085+…+…+a8*0 + 1 )*…*( f1*0.186+…+f8*0+1 ) 的最大值。不过要满足一行最多只能选一个属性的条件,即
a1+b1+c1+…+g1 <=1
a2+b2+c2+…+g2 <= 1
…
a8+b8+…+g8 <=1
这种规模的数据,excel 就能解