문제

나는 A, B, C, D 및 E의 5 가지 값을 가지고 있습니다.

제약 조건 A + B + C + D + E = 1 및 5 개의 함수 F (a), F (b), f (c), f (d), f (e)를 감안할 때, 나는 a tues를 해결해야합니다. e는 f (a) = f (b) = f (c) = f (d) = f (e)이므로 e.

이것에 사용하기에 가장 좋은 알고리즘/접근법은 무엇입니까? 직접 써야하는지 상관하지 않습니다.

편집 : 이들은 비선형 함수입니다. 그 외에도 그들은 특성화 될 수 없습니다. 그들 중 일부는 결국 데이터 테이블에서 보간 될 수 있습니다.

도움이 되었습니까?

해결책

이 질문에 대한 일반적인 대답은 없습니다. 솔루션을 찾는 솔버 어느 방정식은 존재하지 않습니다. Lance Roberts가 이미 말했듯이, 당신은 기능에 대해 더 알아야합니다. 몇 가지 예

  • 함수가 차별화 가능하고 첫 번째 파생물을 계산할 수 있다면 변형을 시도 할 수 있습니다. 뉴턴-랩슨
  • 살펴보십시오 Lagrange Multiplier 방법 제약 조건을 구현합니다.
  • 함수 F가 연속적 인 경우 (아마도 비교할 경우) 이진 검색과 매우 유사한 Bisection 방법을 시도 할 수도 있습니다.

문제를 해결하기 전에 공부하는 기능에 대해 더 많이 알아야합니다.

다른 팁

다른 사람들이 이미 게시 한 것처럼 기능에 대한 더 많은 정보가 필요합니다. 그러나, 우리는 여전히 표준 비선형 프로그래밍 도구 상자로 다음 휴식을 해결하려고 노력할 수 있습니다.

최소 K.
성.
a + b + c + d + e = 1
F1 (a) -k = 0
f2 (b) -k = 0
f3 (c) -k = 0
f4 (d) -k = 0
f5 (e) -k = 0

이제 페널티 방법과 같이 원하는 방식 으로이 문제를 해결할 수 있습니다.

Min K + MU*Sum (Fi (X_I) -K)^2 ST
a+b+c+d+e = 1

또는 간단한 SQP 또는 내부 점 방법.

자세한 내용은 좋은 방법에 대해 조언 할 수 있습니다.

기능은 모두 주장에 따라 단조롭게 증가하고 있습니다. 그 외에도 그들은 특성화 될 수 없습니다. 효과가있는 접근 방식은 다음과 같습니다.

1) A = B = C = C = D = E = 1/5로 시작합니다.
2) F5 (a)를 통해 f5 (e)를 계산하고, 각 함수를 5 (평균)로 나눈 값과 동일하도록 A를 통해 a를 다시 계산합니다.
3) 새로운 a e e e e e e e를 모두 1로 합산하고 F1을 통해 F5를 다시 연마하십시오.
4) 만족할 때까지 반복하십시오.

놀랍게도 빠르게 수렴합니다. 물론 각 반복에는 2 단계에 대해 5 개의 루트 찾기가 필요합니다.

방정식의 하나의 해결책

A + B + C + D + E = 1
F(A) = F(B) = F(C) = F(D) = F(E)

A, B, C, D 및 E는 모두 1/5와 동일합니다. 그것이 당신이 원하는 것인지 확실하지 않습니다 ...

추가 John의 의견 이후 (감사합니다!)

두 번째 방정식이 f1 (a) = f2 (b) = f3 (c) = f4 (d) = f5 (e)를 읽어야한다고 가정하면 Newton-Raphson 메소드를 사용합니다 (Martijn의 답변 참조). E = 1 -A -B -C -D를 설정하여 하나의 변수를 제거 할 수 있습니다. 반복의 모든 단계에서 4x4 시스템을 해결해야합니다. 가장 큰 문제는 아마도 반복을 시작하는 곳일 것입니다. 한 가지 가능성은 임의의 지점에서 시작하여 약간의 반복을 수행하는 것입니다. 아무데도 가지 않으면 다른 임의의 포인트를 선택하고 다시 시작하는 것입니다.

기능에 대해 실제로 아무것도 모른다면 해결책이 없을 필요가 없습니다.

Algencan (Tango의 일부)은 정말 좋습니다. 파이썬 바인딩도 있습니다.

http://www.ime.usp.br/~egbirgin/tango/codes.php - "매트릭스 조작을 전혀 사용하지 않는 일반적인 비선형 프로그래밍은 중간 정도의 컴퓨터 시간으로 매우 큰 문제를 해결할 수 있습니다. 일반 알고리즘은 Lagrangian 유형의 증강입니다 ..."

http://pypi.python.org/pypi/tango%20project%20-%20algencan/1.0

Google Optif9 또는 Allunc. 우리는 이것을 일반 최적화에 사용합니다.

언급 한 것처럼 표준 검색 기술을 사용할 수 있습니다. 검색을 수행하는 동안 사용할 수있는 몇 가지 최적화가 있습니다.

우선, 1-e = a+b+c+d이므로 a, b, c, d 만 해결하면됩니다.

둘째, f (a) = f (b) = f (c) = f (d)가 있고 A를 검색 할 수 있습니다. F (a)를 얻으면 B, C, D를 해결할 수 있습니다. 가능한. 함수를 해결할 수없는 경우 각 변수를 계속 검색해야하지만 이제 A+B+C+D <= 1이므로 검색 할 범위가 제한되어 있습니다.

검색이 개별적이고 유한 한 경우 위의 최적화는 합리적으로 잘 작동합니다.

나는 먼저 입자 떼 최적화를 시도 할 것입니다. 구현하고 조정하는 것은 매우 쉽습니다. 위키 페이지를 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top