微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python数据参数优化传播

如何解决Python数据参数优化传播

让我们假设我有一定数量的参数来描述一个系统:

position,veLocity,mass,length,width

现在每个参数都有一个关联的上限和下限:

position = [0,100]
veLocity = [10,300]
mass = [50,200]
length = [2,10]
width = [2,10]

数据点由这些参数的特定组合定义: 即

data_point = [10,250,50,4,2]

现在,问题是:是否有一个 python 包/算法,以便我可以初始化一定数量的数据点(即 5 个),以便这些数据点最佳地分布在参数空间中。

旁注:

是的,我知道“最佳传播”没有明确定义,但我真的不确定如何去这里。一种可能的定义是:

最大化数据点之间的距离(向量之间的欧几里德距离)

编辑:

使用 linspace 是一个非常好的主意。但是,我很快注意到我的数据存在问题。我实际上忘了谈论约束:

某些数据点是不可能的。即

constraints = [lenght*2-width,position-veLocity]

...如果这些值大于或等于零,则可以认为数据点是可行的。

所以我的问题是:我怎样才能以巧妙的方式包含约束?

使用 linspace,您将看到速度始终大于位置,因此我们将无法获得可行的数据点。

position = [0,10]

# Find Samples 
start = [s[0] for s in [position,width]]
end = [s[1] for s in [position,width]]

num_samples = 5
samples = np.linspace(start,end,num_samples)

print(samples)

这是输出

[[  0.   10.   50.    2.    2. ]
 [ 25.   82.5  87.5   4.    4. ]
 [ 50.  155.  125.    6.    6. ]
 [ 75.  227.5 162.5   8.    8. ]
 [100.  300.  200.   10.   10. ]]

现在,让我们检查约束:

def check_constraint(samples,constraints):
    
    
    checked_samples = []
    for dimensions in samples:
        position,width = dimensions

        # Here I am checking the constraints:
        if any([i<0 for i in [length*2-width,position-veLocity]]):
            pass
        else:
            checked_samples.append(dimensions)
            
    
    return checked_samples

samples_checked = check_onstraint(samples,constraints)
print(samples_checked)

这些将是检查约束后留下的样本:

[]

解决方法

你可以做这样的事情来获得均匀的网格点:

import numpy as np

...

start = [s[0] for s in [position,velocity,...]]
end = [s[1] for s in [position,...]]

num_samples = 5
samples = np.linspace(start,end,num_samples)

这将返回在整个参数空间中均匀分布的点。

编辑 要包含更多约束,最好执行以下操作:

start = ...
end = ...
num_results = 5
results = []

while len(results) < num_results:
    sample = np.random.uniform(start,end)
    if is_valid(sample):
        results.append(sample)

这样您就可以定义 is_valid 函数并检查您想要的任何条件!结果点应该均匀分布在参数空间周围。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。