在这里优化两个模型,每个模型都有自己的一组参数和一个目标,但是两个模型都运行在难以计算的相同数据上,并且是基于两个模型的参数计算的。如何根据各自的目标同时优化两个模型?
这是我到目前为止所做的:
ObjectiveFunction( model1, model2, data ):
simulationResult = VeryExpensiveCall( model1, model2, data )
score1 = ComputeScore( model1, simulationResult )
score2 = ComputeScore( model2, simulationResult )
return score1 + score2
RunOptimization:
genericOptimizer.SetMethod( "CRS2" )
genericOptimizer.SetMinObjective( ObjectiveFunction )
genericOptimizer.Optimize()
这种将单个分数相加以产生组合分数的解决方案存在一个问题:genericOptimizer可能会混淆哪些参数变化会影响分数并朝着错误的方向前进。
例如,假设在连续迭代之间model1.param[0]发生model2.param[2]了变化,导致score1减少但score2增加。优化器无法知道变化model1是否有益model2。似乎知道模型是两个模型的笛卡尔积的优化器应该可以提高性能。
因此,问题是:如何利用模型的笛卡尔性质并针对每个目标进行优化?