2011-04-28 9 views
2

문제 : n 변수 (x)가 상수가됩니다. x1 + x2 + .. + xn = const, 여기서 각 x는 p (양의 5) 양의 정수 값만 취할 수 있습니다. 우리는 x 사이의 차이가 최소화되는, 즉 가장 균일하게 분포되는 솔루션을 찾고자합니다. 이것은 정수 프로그래밍 문제입니까?이 정수 프로그래밍입니까?

DLM은

+0

이 문제의 예를 적어주세요. 예를 들어 x1 + x2 = 10이면 x1은 1,2,3,4,5가 될 수 있고 x2는 4,5,6,7,9가 될 수 있습니다 - x1과 x2가 10이되도록 선택합니다. 올바르게 이해 했습니까? – dfens

+0

@RedDeckWins 숙제 태그는 마치 보이기 때문에 추가 할 수 없지만 실제로는 추가 할 수 없습니다. – sawa

답변

0

실제에 당신은 적절한 분포를 얻기 위해 솔루션의 전체 공간을 검색 할 필요가 NP 완전 문제가 될 것으로 보인다. 어쩌면이

I. 욕심 알고리즘

foreach x in xses 
    if current_sum < desired_sum: 
     take maximal p for x 
    else take_minimal p for x 

당신은 아마 당신이 DESIRED_SUM

보다 약간 SUM 큰 것, 이것이 적절한 솔루션을 가져 오지 않습니다시피을 시도하지만,이 후에는 수 귀하의 배포를 최적화하기 시작하십시오 : 이제 우리는 탐욕스러운 선정 된 xses 세트를 갖게되었습니다

그러면 해결책이 닫힙니다.

II. 진화 알고리즘

엄격한 정의로 유전 알고리즘을 사용할 수 있습니다. 집단은 단지 벡터 및 그것에 적절한 진화 연산을 수행

(원하는 합 X로부터 계산 합계 간의 차이) 분명 X = X1, X2, X3, X4 ... XN] 적합도 함수들의 벡터 것 짧은 시간에 최적의 솔루션을 제공해야합니다.

0

정수에 대한 경계 (또는 추가 정보)가 있습니까? .

function adds_up_to(xs, N): 
    sums := {0} 
    for i from 1 to n: 
     new_sums := {} 
     for sum in sums: 
      for value in values: 
       new_sums := new_sums U {sum + value} 
     sums := new_sums 
    return (N in sums) 

(이 그냥 만족스러운 해결책을 검색 알고리즘이 필요 : 그들은 너무 큰 수없는 경우 (모든 조합을하지 않고) 모든 가능한 금액 통과하는 알고리즘을 할 가능이 될 수 차이를 처리하도록 강화되어야 함 - 의미가 무엇이든간에)

4

예 이것은 정수 프로그래밍 문제입니다.

minimize |x1 - x2| + |x2 - x3| + ... + |xn-1 - xn| 

    subject to x1 + x2 + x3 + ... + xn == c, 

       xi == Ai1*yi1 + Ai2*yi2 + ... + Aip*yip, i=1,...,n, 

       yi1 + yi2 + ... + yip == 1, i=1,...,n, 

       yij binary for i=1,...,n j=1,...,p, 

       xi integer for i=1,...,n, 

여기서 Aij는 xi의 특정 값이 어떤 정수를 나타낼 수 있는지를 설명하는 입력 데이터입니다. 다음은 3 개의 변수 (n = 3)로 구성된 구체적인 예입니다. 각 xi는 두 개의 정수 값 (p = 2) 중 하나를 취할 수 있습니다. 즉, X1은 1 또는 3, X2는 새롭게 작성하여 3 또는 4, X3은 2 또는 3

minimize |x1 - x2| + |x2 - x3| 

    subject to x1 + x2 + x3 == 8, 

       x1 == 1*y11 + 3*y12, 
       x2 == 3*y21 + 4*y22, 
       x3 == 2*y31 + 3*y32, 

       y11 + y12 == 1, 
       y21 + y22 == 1, 
       y31 + y32 == 1, 

       yij binary i=1,2,3 j=1,2 
       xi integer i=1,2,3 

당신은 MIP (혼합 정수 프로그램) 등의 상기 문제점을 재구성 할 수있을 수있을 수있을 수있다 목적 함수를 나타 내기 위해 변수 집합 u.

minimize u1 + u2 + ... + un 

    subject to ui >= xi - xi+1, i=1,...,n-1, 

       ui >= xi+1 - xi, i=1,...,n-1, 

       x1 + x2 + x3 + ... + xn == c, 

       xi == Ai1*yi1 + Ai2*yi2 + ... + Aip*yip, i=1,...,n, 

       yi1 + yi2 + ... + yip == 1, i=1,...,n, 

       yij binary for i=1,...,n j=1,...,p, 

       xi integer for i=1,...,n, 
       ui real for i=1,...,n-1, 

당신은 위의 문제를 해결하기 위해 표준 MIP solver를 사용할 수 있습니다.

+0

코드 맙소사! +1 –

0

관용적 인 기능은 집합 사이의 차이를 최소화하려는 경우 트릭입니다. 간단한 형태는 Sum (ABS (Xi-Xj)) 일 수 있습니다. 여기서 i> j입니다. 선형화 될 수 있습니다.그러나 샘플 변형을 사용하려면 QIP가되고 해결하는 데 약간 시간이 걸립니다.