根据输入查找"best"组合的功能?



我正在尝试制作一种算法来解决"升级"的最佳组合。在基于输入的游戏中。这些是变量:

'imp_total': '30', # This says how many in total the other variables can be combined
'imp_coalpower': '0', 
'imp_oilpower': '0', 
'imp_nuclearpower': '1', 
'imp_windpower': '0', 
'imp_coalmine': '0', 
'imp_oilwell': '0', 
'imp_ironmine': '0', 
'imp_bauxitemine': '0', 
'imp_leadmine': '0', 
'imp_uramine': '1', 
'imp_farm': '0', 
'imp_gasrefinery': '0', 
'imp_steelmill': '0', 
'imp_aluminumrefinery': '0', 
'imp_munitionsfactory': '0', 
'imp_policestation': '1', 
'imp_hospital': '1', 
'imp_recyclingcenter': '1', 
'imp_subway': '1', 
'imp_supermarket': '0', 
'imp_bank': '0', 
'imp_mall': '3', 
'imp_stadium': '3', 
# These variables are chosen by the user:
'imp_barracks': '5', 
'imp_factory': '5', 
'imp_hangar': '5', 
'imp_drydock': '3'

根据'imp_total'和用户选择的变量,我想让计算机计算出什么是'最佳';组合升级。在这种情况下,最好意味着最多的收入。每次升级都会对收益产生复杂的直接和间接影响。例如,矿山为你提供了可以出售的资源,但它们也会造成污染,从而减少城市人口,从而减少收入。这个系统的所有算法都是已知的。

影响收入的变量有疾病、商业、人口、犯罪、污染等。不同的升级对这些数字有不同的影响。

我想知道的是我应该如何去做这件事?有人告诉我,我应该研究背包问题,但我不知道如何实现这么多相互影响的不同数字和输入。这可能吗?有没有其他的算法,我可以看看解决我的问题?

如果你的" best ";组合可以表示为一组约束,你可能想看看线性规划(也许是单纯形法),所以用数学方法解决它。

否则,您可以尝试转换"best"转换成一个数字(或元组),允许在组合之间进行比较,并将其用作对组合的max()调用中的键。

如果有太多的组合,您可能需要使用动态规划来优化搜索最佳组合(通常在递归遍历中,可能使用记忆,即背包问题)

最新更新