이 문제는 데이터 세트에서 최고 점수 합계를 생성하기 위해 두 개의 최소-최대 기준 필터를 찾는 것과 관련이 있습니다.
3 개의 열이있는 데이터 세트가 있습니다. x, y, score, 100 만 개 이상의 행.
엑스 | 과 | 점수 |
---|---|---|
3.6 | 1.2 | -5 |
4.2 | 1.2 | -4 |
1.2 | 30.2 | 1 |
2.9 | 6.8 | 6 |
3.1 | 5.8 | 7 |
0.1 | 15.8 | 7 |
데이터에는 상관 관계가있을 수도 있고 없을 수도 있습니다.
가능한 가장 높은 점수 합계를 제공하는 x 및 y에 대한 최소 / 최대 기준 필터를 찾고 싶습니다.
이것이 SQL에서 쿼리가 어떻게 보이는지입니다.
SELECT SUM(score)
FROM mytable
WHERE
x > xmin AND x < xmax AND
y > ymin AND y < ymax
내가 찾고있는 것은 xmin, xmax, ymin och ymax에 대한 최적의 값입니다.
이 문제를 해결하려면 어떤 종류의 최적화 방법이 필요합니까? 그리고 구현은 정확히 어떻게 생겼을까 요?
(가급적이면 Java 또는 postgres SQL을 사용하여 구현됩니다.)
그렇게 쉽지는 않습니다. 내 MIP 모델은 다음과 같습니다.
minimize sum(i, selected(i)*score(i))
x(i) <= xmin + M*(xBetween(i)+xAbove(i))
x(i) >= xmax - M*(xBetween(i)+xBelow(i))
x(i) >= xmin - M*xBelow(i)
x(i) <= xmax + M*xAbove(i)
y(i) <= ymin + M*(yBetween(i)+yAbove(i))
y(i) >= ymax - M*(yBetween(i)+yBelow(i))
y(i) >= ymin - M*yBelow(i)
y(i) <= ymax + M*yAbove(i)
xBetween(i)+xAbove(i)+xBelow(i)=1
yBetween(i)+yAbove(i)+yBelow(i)=1
selected(i) <= xBetween(i)
selected(i) <= yBetween(i)
selected(i) >= xBetween(i)+yBetween(i)-1
xmin <= xmax
ymin <= ymax
xBetween(i),xAbove(i),xBelow(i) ∈ {0,1}
yBetween(i),yAbove(i),yBelow(i) ∈ {0,1}
selected(i) ∈ {0,1}
상수 M은 충분히 큰 숫자입니다 (나는 x 또는 y 데이터의 범위를 사용했습니다).
난수로 다음을 얻었습니다.
---- 37 VARIABLE z.L = 30.940 objective
---- 44 PARAMETER data data + results
x y score x.betw y.betw selected
i1 1.717 6.611 -8.972
i2 8.433 7.558 -9.880
i3 5.504 6.274 -1.975
i4 3.011 2.839 0.398 1.000 1.000 1.000
i5 2.922 0.864 2.578 1.000 1.000 1.000
i6 2.241 1.025 -5.485 1.000
i7 3.498 6.413 -2.078 1.000
i8 8.563 5.453 -4.480 1.000
i9 0.671 0.315 -6.953
i10 5.002 7.924 8.726
i11 9.981 0.728 -1.547 1.000
i12 5.787 1.757 -7.307 1.000
i13 9.911 5.256 -2.279 1.000
i14 7.623 7.502 -2.507
i15 1.307 1.781 -4.630 1.000
i16 6.397 0.341 8.967
i17 1.595 5.851 -6.221 1.000
i18 2.501 6.212 -4.050 1.000
i19 6.689 3.894 -8.509 1.000
i20 4.354 3.587 -1.973 1.000
i21 3.597 2.430 -7.966 1.000
i22 3.514 2.464 -2.322 1.000
i23 1.315 1.305 -3.518 1.000
i24 1.501 9.334 -6.157
i25 5.891 3.799 -7.753 1.000
i26 8.309 7.834 1.931
i27 2.308 3.000 0.229 1.000 1.000 1.000
i28 6.657 1.255 -9.099 1.000
i29 7.759 7.489 5.662
i30 3.037 0.692 8.915 1.000 1.000 1.000
i31 1.105 2.020 1.929 1.000
i32 5.024 0.051 2.147
i33 1.602 2.696 -2.750 1.000
i34 8.725 4.999 1.881 1.000
i35 2.651 1.513 3.597 1.000 1.000 1.000
i36 2.858 1.742 0.132 1.000 1.000 1.000
i37 5.940 3.306 -6.815 1.000
i38 7.227 3.169 3.138 1.000
i39 6.282 3.221 0.478 1.000
i40 4.638 9.640 -7.512
i41 4.133 9.936 9.734
i42 1.177 3.699 -5.438 1.000
i43 3.142 3.729 3.513 1.000 1.000 1.000
i44 0.466 7.720 5.536
i45 3.386 3.967 8.649 1.000 1.000 1.000
i46 1.821 9.131 -5.975
i47 6.457 1.196 -4.057 1.000
i48 5.607 7.355 -6.055
i49 7.700 0.554 -5.073
i50 2.978 5.763 2.930 1.000 1.000 1.000
range(data) 9.516 9.885 19.614
min(solution) 2.241 0.554
max(solution) 3.498 5.851
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다