제약 조건이있는 랜덤 벡터 생성


10

다음 제약 조건을 만족하는 실수 a_i의 난수 벡터를 만들어야합니다.

abs(a_i) < c_i;      
sum(a_i)< A;        # sum of elements smaller than A
sum(b_i * a_i) < B; # weighted sum is smaller than B 
aT*A*a < D          # quadratic multiplication with A smaller than D

where c_i, b_i, A, B, D are constants.

이런 종류의 벡터를 효율적으로 생성하는 일반적인 알고리즘은 무엇입니까?


1
네 번째 제약 조건 인 "a의 크기는 .."입니다.
M. Tibbits

내 실수. 완성 된 설명. 피드백을 주셔서 감사합니다.
LouisChiffre

그것은 어떻게 a_i분포 를 따르고 p_i또한 그보다 작 c습니까? 분포도 p_i그보다 적기 때문 c입니까? 어떤 분포에서 생각하십니까?
deps_stats

@deps_stats. 아주 좋은 지적입니다. 의사 코드는 명확하지 않았습니다. 내가 생각하는 분포는 포아송 분포입니다. 각 요소는 람다가 다른 포아송 분포를 따릅니다. 그것을 염두에두고 나는 첫 번째 조건 (a_i <c)이 필요하지 않다고 생각합니다. 세대의 끝에 a_i를 재조정하여 만족시킬 수 있기 때문입니다.
LouisChiffre

다른 질문을하겠습니다 c. A, B및 람다는 고정되어 있습니까?
deps_stats

답변:


4

내가 당신을 올바르게 이해한다면, 작은 부피의 n- 차원 공간의 점들만이 당신의 제약을 충족시킵니다.

첫 번째 제약 조건은 그것을 초구의 내부로 제한합니다. comp.graphics.algorithms FAQ "구상의 균일 한 임의의 점"3 차원 단위 공에서 균일하게 분포 된 점을 생성하는 방법을 생각 나게합니다 . 두 번째 구속 조건은 초구에서 약간 떨어지고 다른 구속 조건은 구속 조건을 충족하는 볼륨에서 더 멀어집니다.

가장 간단한 방법은 FAQ에서 제안한 방법 중 하나라고 생각합니다.

  • 전체 볼륨이 포함 임의의 축 정렬 경계 상자 를 선택 하십시오. 이 경우, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c에는 첫 번째 제한 조건에 의해 설명 된 하이퍼 스피어가 포함되어 있고 다른 제한 조건은 계속 휘파람 상태이므로 전체 제한 량을 포함합니다. 그 볼륨에서 멀리.
  • 알고리즘은 해당 경계 상자 전체에서 점을 균일하게 선택합니다. 이 경우, 알고리즘은 후보 벡터의 각 좌표를 -c에서 + c까지의 독립적으로 균일하게 분포 된 난수로 독립적으로 설정합니다. (이 볼륨 전체에 동일한 밀도로 점을 분포시키고 자한다고 가정합니다. 어떤 이유가있는 경우 알고리즘이 Poisson 분포 또는 다른 비 균일 분포를 사용하여 일부 또는 모든 좌표를 선택할 수 있다고 가정합니다.)
  • 후보 벡터가 있으면 각 제약 조건을 확인하십시오. 실패하면 다시 가서 다른 지점을 선택하십시오.
  • 후보 벡터가 있으면 나중에 사용할 수 있도록 어딘가에 저장하십시오.
  • 저장된 벡터가 충분하지 않으면 돌아가서 다른 벡터를 생성하십시오.

충분히 고품질의 난수 생성기를 사용하면 (예상 한) 균일 밀도로 기준을 충족하는 저장된 좌표 세트가 제공됩니다.

아아, 당신이 상대적으로 높은 차원을 가지고 있다면 (즉, 상대적으로 긴 좌표 목록에서 각 벡터를 구성하는 경우) 내접 된 구 (훨씬 적은 양)는 전체 부피의 놀랍도록 작은 부분을 가지고 있습니다. 전체 경계 상자이므로 많은 반복을 실행해야 할 수도 있습니다. 대부분의 경우 제한된 영역 내부의 점을 찾기 전에 제한된 영역 외부에서 거부 된 점을 생성합니다. 요즘 컴퓨터는 꽤 빠르기 때문에 충분히 빠를까요?


그래서 당신이 제안하는 것은 효과적으로 공간을 샘플링하는 것입니다. 경계 상자를 정적으로 수행 할 수 없다는 것을 제외하고 비슷한 문제가 있습니다 (IE, 하드 코딩 할 수 없음). 경험상 제약 조건이 다음과 같은 경우 분류됩니다. f1(x1) + f2(x2) == C여기에 제안 사항이 있습니까?
Groostav

예, 동일 ( "==") 제약 조건이 있으면 샘플링 방법이 작동하지 않습니다. 구 내부가 아닌 구의 표면 또는 원통의 표면에있는 점 (반지름 == R)과 같은 구속 조건 (반지름 <= R). 전체 볼륨에서 균일하게 점을 선택하면 원하는 표면에 "never"(확률이 0에 가까워지지 않음)가됩니다. 따라서 f1 (x1) + f2 (x2) == C가되도록 점 [x1, x2, x3]을 찾으려면 임의의 x1을 선택한 다음 강제로 x2 = inverse_f2 (C-f1 (x1)).
David Cary

구 표면에 균일하게 분포 된 점의 특수한 경우 " 구상의 균일 한 임의 점"을 참조하십시오 .
David Cary

@Groostav : 아마도 귀하의 질문이 새로운 최상위 질문으로 게시 할 수있는 원래 질문과 충분히 다른 것일 수 있습니다. "방금 후속 질문을 게시해야한다고 들었습니다. 왜 그리고 어떻게?"
David Cary
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.