我有一些功能(例如,双功能(双值))和一些范围(例如,从A到B)。我需要在这个范围内计算函数的最大值。是否有现有的图书馆?拜托,给我建议。
答案 0 :(得分:2)
如果函数需要处理浮点值,则必须使用Golden section search之类的函数。请注意,对于此特定方法,可以处理的功能存在重大限制(特别是它必须是unimodal)。您可以对算法进行一些adjustments扩展到更多功能,特别是这些修改将使其适用于连续函数。
答案 1 :(得分:0)
这是一个连续函数,还是一组离散值?如果是离散值,那么您可以遍历所有值,并将最大/最小标志设置为808sound建议,或者您可以将所有值加载到数组中。
如果它是一个连续函数,那么你可以在离散输入处填充函数值的数组,并找到上面的最大值,或者如果它是可微分的,那么你可以使用基本微积分来找到df的点( x)/ dx是0.后一种情况有点抽象,可能比你想要的更复杂?
快速谷歌搜索引导我这样: http://code.google.com/p/javacalculus/
但我自己从未使用它,所以我不知道是否实现了所需的功能。然而,它确实是微分方程,因此我认为它们具有像基本差异一样的“婴儿用品”。
答案 2 :(得分:0)
我不知道你的问题是否有Java库。 但我知道你可以轻松地使用MatLab(或开源等效的Octave)。
答案 3 :(得分:0)
如果您没有任何关于内部工作功能的指示(即该功能是接受输入并产生输出的黑盒子),则没有“简单”的方法来查找全局最大值。
您的输入可以选择无数个点(技术上),因此“迭代所有可能的输入”在数学上是不可行的。
有各种算法可以在这样的函数中为您提供估计最大值:
hill climbing algorithm和firefly algorithm是两个,但还有更多。这是一个相当充分记录/研究过的计算机科学问题,网上有很多资料可供您查看。我建议从爬山算法开始,并可能扩展到其他全局优化算法。
注意:这些算法并不保证结果是最大值,而是提供其值的估计值。 *