2017-10-21 8 views
1

현재 나는 내가하고있는 일을 성취하기위한 최선의 방법을 고수하기 위해 노력하고 있습니다. 나는 다음 판다를 가지고있다.Python : 유전 알고리즘으로 배낭 최적화를 해결 하시겠습니까?

Player Pos Salary My Proj 
0 James Harden PG/SG 10600 51.94472302 
1 Jose Juan Barea PG/SG 4200 22.20823452 
2 Stephen Curry PG/SG 8700 42.95809374 
3 Eric Gordon  SG  5400 27.45218158 
4 Nikola Vucevic C  7400 37.00103015 
5 Wilson Chandler SF/PF 4900 24.83866589 

매일 약 200 명이 참여합니다. 다음 제약 조건을 따르는 초안 작성시 최대 20 개의 라인업을 채우기 위해 최적화를 실행해야합니다.

$ 50,000 미만 1 PG, 1 SG, 1 SF, 1 PF, 1 C, 1 G, 1 F 및 1 UTIL

대부분의 플레이어는 위치 열의 "/"문자로 표시된 단일 라인업에서 여러 위치를 채울 수 있습니다. G 위치는 PG 또는 SG로 채울 수 있으며 F 위치는 SF 또는 PF로 채울 수 있으며 UTIL 위치는 모든 위치를 허용합니다.

처음에는 가장 단순한 것처럼 보이는 배낭 무차별 접근 방식을 사용했지만 문자 그대로 수조가 넘는 조합이 있으므로 실제로 진정으로 원하는 것을 수행하지 않으면 어이없는 시간이 걸릴 것입니다.

대신 나는 많은 강의 비디오를 보면서이 문제에 대한 좋은 생각이라고 생각하여 유전학 접근법을 사용하기로 결정했습니다. 그러나 나는 일반적인 1/0 배낭 접근법에서이 문제를 어떻게 설정해야할지 모르겠다. 왜냐하면 내가 포함시켜야 할 많은 것들이 있기 때문이다. 일반적인 배낭 접근 방식에서는 무게와 가치가 있습니다. 내 무게와 가치는 선수 급여와 예상 점수입니다. 그러나 나는 여기에 플레이어의 위치도 포함시켜야하는데, 이것은 한 플레이어에게 1 개 또는 때로는 2 개의 다른 가능성 일 수 있습니다.

희망적으로 말하자면, 기본적으로 파이썬 3에서이 작업을 시작하는 방법에 대한 통찰력을 찾고 있습니다. 당신이 제공 할 수있는 것을 미리 감사드립니다!

가 완전히 유전자 알고리즘의 기본을 이해하고, 좋은 예 here :

답변

0

여기에 좋은 시작이다.

유전 알고리즘의 장점은 일단 피트니스를 평가하는 방법을 정의하면 다른 모든 요소가 자체적으로 결정된다는 것입니다. 당신은 완전히 무작위로 항목을 시작할 수 있으며 연속적인 세대를 거치면 질서 정연해질 것입니다. 라인업과 배낭 문제는 올바른 방식으로 접근하면 매우 유사합니다. 당신은 이미 얼마나 많은 아이템이 들어갈 수 있는지 알고 있습니다 (헤드 스타트). 조지아는 어디에서 오는 당신은 지금 막하는 사람을 선택해야하고 즉 다음 단계의

생각해을 :.

  1. 당신의 인구 (임의 라인업)
  2. 은 인구의 적합성을 확인 만들기 게재 순위가 채워지고 급여가 최대보다 적습니다.
  3. 라인업을 채점하면서 인구를 진화 시키십시오.
  4. 만족할 때까지 새로운 세대를 계속하십시오.