簡體   English   中英

Python 參數的數據優化傳播

[英]Python Data Optimal Spreading of Parameters

假設我有一定數量的描述系統的參數:

IE

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 個),以便這些數據點最佳地分布在參數空間中。

邊注:

是的,我知道“最佳傳播”沒有明確定義,但我真的不確定如何在這里 go。 一種可能的定義是:

最大化數據點之間的距離(向量之間的歐幾里得距離)

編輯:

使用 linspace 是一個非常好的主意。 但是,我很快注意到我的數據存在問題。 我實際上忘了談論約束:

有些數據點是不可能的。 IE

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

...如果這些值大於或等於零,則可以認為數據點是可行的。

所以我的問題是:我怎樣才能以一種聰明的方式包含約束?

使用 linspace,您將看到速度始終大於 position,因此我們將無法獲得可行的數據點。

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

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

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

print(samples)

這是 output:

[[  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, velocity, mass, length, 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, velocity, ...]]

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 function 並檢查您想要的任何條件。 結果點應均勻分布在參數空間周圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM