用python优化一组数据

2024-04-20 04:37:03 发布

您现在位置:Python中文网/ 问答频道 /正文

使用python对一组数据进行优化。你知道吗

以下数据集可用 x、 y,f(x),f(y)。你知道吗

要优化的函数(最大化): f(x,y)=f(x)*y-f(y)*x

基于以下限制:

V>;=sqrt(f(x)^2+f(y)^2)

I>;=sqrt(x^2+y2)

其中V和I是常数。你知道吗

谁能让我知道我需要使用什么优化模块吗?据我所知,我需要执行离散优化,因为我已经为x,y,f(x)和f(y)设置了f值。你知道吗


Tags: 模块数据函数gt常数sqrty2
1条回答
网友
1楼 · 发布于 2024-04-20 04:37:03

对这样的问题使用复杂的优化器(http://docs.scipy.org/doc/scipy/reference/optimize.html)是一个相当糟糕的主意。你知道吗

这看起来是一个很容易在O(n^2)下解决的问题,其中n=max(|x|,|y|),简单地说:

  1. 排序x,y,f(x),f(y)创建sorted(x), sorted(y), sorted(f(x)), sorted(f(y))
  2. 对于每一个xsorted(y)中找到I^2 >= x^2+y^2所在的位置,对于f(x)sorted(f(y))V^2 >= f(x)^2 + f(y)^2也一样(两个二进制搜索,如I^2 >= x^2+y^2 <=> |y| <= sqrt(I^2-x^2)这样您就可以在恒定的时间内找到“屏障”,然后使用bin搜索来找到最接近“不等式右侧”的实际数据点)
  3. 遍历sorted(x)并针对每个x
    • 同时迭代yf(y)的元素,并丢弃(在这个循环中)不在步骤2中找到的borth区间的点。(线性复杂度)
    • 哪个记录对是最大化的
  4. 返回x_max,y_max

总的复杂度是二次的,因为第一步是O(nlgn),第二步循环的每次迭代都是O(lgn),所以整个第二步都是O(nlgn),第三步循环是O(n),第三步第一个子步循环是O(n)(但在现实生活中,由于约束,它应该几乎是常数),这使得整个算法O(n^2)(和在大多数情况下,它将表现为O(nlgn))。它也不依赖于f(x,y)的定义(它将其用作黑盒),因此您可以通过这种方式优化任意函数。你知道吗

相关问题 更多 >