scipy - 惩罚成本值在优化问题中的影响
问题描述
我有一个优化问题,我试图最小化项目成本,通常价值 1 亿到 50 亿美元。我正在使用 Python 2.7 中 Scipy 包的 COBYLA 可用部分。
newsol = minimize(ObjectiveFunction,X0,bounds=Bounds,constraints = Constraints,method='COBYLA')
我在 COBYLA 中制定了 5 个无约束方程。如果违反了,我会在项目成本中增加 1 万亿美元的罚款。
# check constraints - for each constraint violated add a large penalty ####
for constraint in Constraints:
constraintValue = constraint["fun"](newsol.x)
numViolations = np.sum(constraintValue < 0 )
if(numViolations):
penaltyCost = 1e12
penaltyMult = 1.0
if("penaltyMultiplier" in constraint):
penaltyMult = constraint["penaltyMultiplier"](newsol.x)
OptimizedProjectCost += penaltyMult*numViolations*penaltyCost
我的问题:考虑到所提供的项目成本的数量级,这个惩罚值是否超出范围。这个值对优化收敛有影响吗?
解决方案
推荐阅读
- angular - Angular - 错误类型错误:无法读取未定义的属性“名称”
- rust - 对拥有列表的元素进行引用的结构使用生命周期的正确方法是什么?
- php - 如何修复 Jodit 上传器中 JSON 数据错误的第 1 行第 1 列的意外字符
- c++ - 为什么动态转换的指针执行为 NULL 的派生类对象?
- python - 如何将两个列表添加到一个新列表中而不在 Python 中合并它们?
- c++ - 用大括号初始化类类型的对象时(直接列表初始化),参数在哪里传递?
- php - 如果在 Laravel Query 中计数超过 3,如何选择项目
- javascript - 拖动时更改svg的背景
- javascript - Angular Animations - 如何在状态之间保持样式?
- java - 如何在 ActivityResultLauncher 中返回结果