2017-11-06 5 views
-1

안녕하세요 다음 문제가 있습니다. 큰 매개 변수 공간이 있습니다. 제 경우에는 10 차원과 같습니다. 그러나 단순화하기 위해 x1, x2 및 x3 변수가 있다고 가정합니다. 그들은 1에서 10까지의 이산 숫자입니다. 이제 가능한 모든 매개 변수 조합을 만들고 후 처리에 사용하려고합니다. 내 실제 경우에는 너무 많은 combinatons 있습니다. 그래서 검색 공간을 줄이기 위해 준 임의 시퀀스 검색을하고 싶습니다. 그러나 검색 공간의 조합은 가능한 한 좋은 것으로 커버해야합니다. (균일 한 배포). 검색 공간에서 클러스터에 대한 매개 변수 조합을 방지하려면 가능한 한 전체 검색 공간을 포괄해야합니다. 매개 변수 처리에서 매개 변수 조합의 기본 설정을 찾아야합니다. Haton, Hammersley 또는 Sobol 시퀀스와 같은 여러 가지 방법이 있습니다. 그러나 그들은 이산적인 숫자를 위해 일하지 않고있다. 준 임의 시퀀스를 수행하는 하나의 패키지는 혼란 스럽다. 시퀀스의 수를 반올림하면 각 변수의 변수 수가 서로 다른 변수 조합에서 두 번 이상 나타납니다. 그건 내가 원하는 것이 아니다. 나는 모든 변수가 한번만 발생하고 변수는 검색 공간에 균일하게 분포되기를 원합니다. 처음부터 모든 변수가 한 번만 나타나는 변수 조합의 무작위 다차원 세트를 만들 수 있습니까? 예를 들어, 2 차원 격자 10x10에서 가능한 조합은 대각선입니다.파이썬 : 준 임의 시퀀스에 대한 대안

import numpy as np 
import chaospy as cp 

#Create a Joint distributuon of the three varaibles, which ranges going from 1 to 10 
distribution2 = cp.J(cp.Uniform(1, 10),cp.Uniform(1, 10),cp.Uniform(1, 10)) 

#Create 10 numbers in the variable space 
samplesSobol = distribution2.sample(10, rule="S") 

#Transpose the array to get the variable combinations in subarrays 
sobolPointsTranspose = np.transpose(samplesSobol) 

예 출력 :

물론 3 차원 나는

는 Sobol 순서와 1-10에서 세 개의 변수를 가진 간단한 예를 가지고 있습니다, 모든 파라미터 값을 커버하는 100 개 조합을 필요
[[ 7.89886475 6.34649658 4.8336792 ] 
[ 5.64886475 4.09649658 2.5836792 ] 
[ 1.14886475 8.59649658 7.0836792 ] 
[ 1.21917725 5.01055908 2.5133667 ] 
[ 5.71917725 9.51055908 7.0133667 ] 
[ 7.96917725 2.76055908 9.2633667 ] 
[ 3.46917725 7.26055908 4.7633667 ] 
[ 4.59417725 1.63555908 5.8883667 ] 
[ 9.09417725 6.13555908 1.3883667 ] 
[ 6.84417725 3.88555908 3.6383667 ]] 

이제 모든 변수 번호는 고유하지만 출력은 개별적이지 않습니다. I는 반올림 얻을 수

[[ 8. 6. 5.] 
[ 6. 4. 3.] 
[ 1. 9. 7.] 
[ 1. 5. 3.] 
[ 6. 10. 7.] 
[ 8. 3. 9.] 
[ 3. 7. 5.] 
[ 5. 2. 6.] 
[ 9. 6. 1.] 
[ 7. 4. 4.]] 

이제 문제, 예를 들면 1 차원의 제 7 번째의 기준 또는 제 4 회 발생.

+1

_ 검색 공간 ... _이게 뭐지? 그리고 ppl은 코드를 먼저보고 싶습니다 ... 가지고있는 것을 보여주고 여러분이 기대하는 결과물을 보여주십시오 ... –

+0

여러분은 여러분의 문제에 대해 더 많이 알려주고 여러분이 성취하고자하는 것은 무엇입니까? 문제를 해결하는 방법의 수는 아마 유용하지 않을 것입니다. 왜 숫자가 반복되지 않을 수 있습니까? 이것은 각 단일 매개 변수에 대해서만 또는 서로에 따라도 사실입니까? – Arne

+0

실제로 코드를 보는 것이이 질문을 더 어렵게 만들 것이라고 생각합니다. 즉, 문제 설명에 대한보다 명확한 대답이 필요합니다. –

답변

1

"처음부터 모든 변수가 한 번 나타나는 무작위 다차원 변수 조합을 만들 가능성이 있습니까?"이 작업을 수행하려면 각 변수의 값이 같아야합니다. 귀하의 예제에서이 숫자는 10입니다. 그래서 그것을 사용할 것입니다.

랜덤 포인트를 생성하는 한 가지 방법은 범위의 무작위 순열을 쌓는 것입니다 (10). 이와 같이, 예를 들어, 세 개의 변수 :

In [180]: np.column_stack([np.random.permutation(10) for _ in range(3)]) 
Out[180]: 
array([[6, 6, 4], 
     [9, 2, 0], 
     [0, 4, 3], 
     [5, 9, 5], 
     [2, 8, 7], 
     [1, 1, 9], 
     [8, 3, 8], 
     [3, 5, 1], 
     [4, 0, 2], 
     [7, 7, 6]]) 
+0

그래, 가능성은 있지만 변수를 제어하는 ​​방법이 필요하다. 검색 공간에 균등하게 분포하고 검색 공간을 가능한 한 잘 덮으십시오. – Varlor

+0

해당 정보를 포함하도록 질문을 편집하십시오. –

+0

균일 한 배포를 어떻게 관리 하시겠습니까? 그게 정확히 무슨 뜻입니까? 정확히 무엇을 멈추고 싶습니까? – Arne

0

이 답변 [A, B, C가 D] 1 내지 10의 자연수가되도록 4 값리스트 목록을 생성하는 기능을 제공한다 각 집합에서 매개 변수는 정확히 한 번만 값을 취할 수 있습니다.

import random 

def generate_random_sequences(num_params=4, seed=0) 
    random.seed(seed) 
    value_lists = [[val for val in range(1, 11)] for _ in range(num_params)] 
    for values in value_lists: 
     random.shuffle(values) 
    ret = [[] for _ in range(num_params)] 
    for value_idx in range(10): 
     for param_idx in range(num_params): 
      ret[param_idx].append(value_lists[param_idx][value_idx]) 
    return ret 

난 워렌의 대답이 numpy를 사용하는 것이 우수한 방법이라는 것을 알았고 이미 어쨌든 numpy를 사용하고 있습니다. 여전히 순수 파이썬 구현으로이 하나를 제출하십시오.