문제

유전자 알고리즘 (GA) 유전 프로그래밍 (GP)은 흥미로운 분야의 연구이다.

나는 알고 싶어에 대한 특정 문제를 해결을 사용하여 조지아/GP 와 라이브러리/프레임워크를 사용하지 않은 경우에 자신의 롤.

질문:

  • 무슨 문제가 당신을 사용 GA/GP 해결?
  • 어떤 라이브러리/프레임워크를 사용했습니까?

내가 찾는 직접 경험할 수 있는,그렇게 답변하지 마십시오지 않으면 당신을 제어 할 수 있습니다.

도움이 되었습니까?

해결책

아니다 숙제.

전문 프로그래머 (1995)로서의 첫 번째 직업은 S & P500 선물을위한 유전자 조정 기반 자동 거래 시스템을 작성하는 것이 었습니다. 응용 프로그램은 Visual Basic 3 [!]로 작성되었으며 VB3에 수업이 없었기 때문에 그 당시에 어떻게했는지 전혀 모릅니다.

응용 프로그램은 무작위로 생성 된 고정 길이 스트링 ( "유전자"부분)으로 시작되었으며, 각각은 S & P500 선물의 분당 가격 데이터와 특정 주문에 해당합니다. (구매 또는 판매) 및 스톱 손실 및 스톱 비영리 금액. 각 문자열 (또는 "Gene")은 3 년간의 역사적 데이터를 통해 이익 성과를 평가했습니다. 지정된 "모양"이 과거 데이터와 일치 할 때마다 해당 구매 또는 판매 주문을 가정하고 거래 결과를 평가했습니다. 나는 각 유전자가 고정 된 양의 돈으로 시작하여 잠재적으로 파산하여 유전자 풀에서 완전히 제거 될 수 있다는 경고를 추가했습니다.

인구의 각 평가 후, 생존자들은 무작위로 교차 브로드 (두 부모로부터 비트를 혼합함으로써), 유전자가 부모로서 선택된 이익에 비례 할 가능성이있다. 또한 포인트 돌연변이의 가능성을 추가하여 물건을 향상 시켰습니다. 수백 세대 후에, 나는 사망/깨지기의 가능성이없는 (물론 역사적 데이터에서) 5000 달러를 평균 $ 100000로 바꿀 수있는 유전자의 집단으로 끝났다.

불행히도, 나는이 시스템을 활용할 기회를 얻지 못했습니다. 상사가 전통적인 방식으로 거래하는 3 개월 이내에 10 만 달러에 가까운 것을 잃었고, 프로젝트를 계속할 의지를 잃었 기 때문입니다. 돌이켜 보면, 나는 시스템이 큰 이익을 얻었을 것이라고 생각한다. 나는 반드시 올바른 일을했기 때문이 아니라, 내가 생산 한 유전자의 개체수가 약 5에 의해 구매 명령 (판매 명령과 반대로)에 편향되어 있기 때문이다. 1 비율. 그리고 우리가 20/20 후시로 알듯이, 시장은 1995 년 이후에 조금 증가했습니다.

다른 팁

나는이 작은 세상에 살았던 작은 동물을 만들었습니다. 그들은 세계로부터 약간의 입력을받은 신경망 뇌를 가지고 있었고 출력은 다른 행동들 사이에서 움직임을위한 벡터였습니다. 그들의 두뇌는 "유전자"였습니다.

이 프로그램은 임의의 뇌를 가진 임의의 동물 집단으로 시작했습니다. 입력 및 출력 뉴런은 정적 이었지만 그 사이에있는 것은 그렇지 않았습니다.

환경에는 음식과 위험이 포함되어 있습니다. 음식은 에너지를 증가시키고 에너지가 충분하면 짝짓기를 할 수 있습니다. 위험은 에너지를 줄이고 에너지가 0이면 죽었다.

결국 생물들은 전 세계를 돌아 다니며 음식을 찾고 위험을 피하도록 진화했습니다.

그런 다음 약간의 실험을하기로 결정했습니다. 나는 생물 뇌에 "입"이라는 출력 뉴런과 "귀"라는 입력 뉴런을 주었다. 다시 시작하여 공간을 극대화하기 위해 진화했다는 사실에 놀랐으며 각 생물은 각각의 부분에 머무를 것입니다 (음식은 무작위로 배치되었습니다). 그들은 서로 협력하는 법을 배웠고 서로 길을 가지지 않는 법을 배웠습니다. 항상 예외가있었습니다.

그런 다음 흥미로운 것을 시도했습니다. 나는 죽은 생물이 음식이 될 것입니다. 무슨 일이 있었는지 추측하십시오! 두 가지 유형의 생물이 진화했으며, 무리처럼 공격 한 생물과 피하는 생물과 피하는 생물.

그렇다면 여기서 교훈은 무엇입니까? 의사 소통은 협력을 의미합니다. 다른 사람을 아프게하는 요소를 소개하자마자 무언가를 얻는다는 것은 협력이 파괴됩니다.

이것이 자유 시장과 자본주의의 시스템에 어떻게 반영되는지 궁금합니다. 기업이 경쟁을 해칠 수 있고 을 가지고 도망 치다, 그들은 그들이 경쟁을 해치기 위해 그들의 힘으로 모든 것을 할 것이라는 것이 분명합니다.

편집하다:

프레임 워크를 사용하여 C ++로 썼습니다. 내 자신의 신경망과 GA 코드를 썼습니다. 에릭, 그럴듯하다고 말해 주셔서 감사합니다. 사람들은 보통 GA의 힘을 믿지 않습니다 (한계는 분명하지만). GA는 간단하지만 단순하지는 않습니다.

의심 자의 경우, 신경망은 둘 이상의 층이있는 경우 모든 기능을 시뮬레이션 할 수있는 것으로 입증되었습니다. GA는 솔루션 공간을 탐색하는 매우 간단한 방법입니다. GA를 신경망과 결합하면 일반적인 문제에 대한 대략적인 솔루션을 찾는 기능을 찾을 수있는 좋은 방법이 있습니다. 우리는 신경망을 사용하고 있기 때문에 다른 입력에 대한 기능을 최적화하고 있으며, 다른 입력은 GA를 사용하는 것처럼 기능에 대한 일부 입력이 아닙니다.

생존 예제의 데모 코드는 다음과 같습니다. http://www.mempko.com/darcs/neural/demos/eaters/지침 구축 :

  • DARCS, LIBBOOST, LIBALLEGRO, GCC, CMAKE 설치
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

Eaters Screenshot

2004 년 1 월, 나는 아마존 킨들 (Amazon Kindle)이 몇 년 전에 일본에서 출시 된 최초의 상업용 전자 잉크 인 소니 라이브리 (Sony Librie)를 위해 전자 제품을 만들고있는 필립스 새로운 디스플레이 기술과 연락을 취했다. 유럽.

필립스 엔지니어들은 큰 문제가있었습니다. 제품이 시장에 출시되기 몇 달 전에, 그들은 페이지를 변경할 때 여전히 화면에서 고스트를 얻고있었습니다. 문제는 정전기 필드를 생성 한 200 명의 드라이버였습니다. 이 드라이버 각각에는 0에서 1000mV 사이에서 오른쪽으로 설정 해야하는 특정 전압이 있거나 이와 같은 전압이있었습니다. 그러나 당신이 그들 중 하나를 바꾸면 모든 것을 바꿀 것입니다.

따라서 각 운전자의 전압을 개별적으로 최적화하는 것이 문제가되지 않았습니다. 가능한 값의 조합의 수는 수십억이었고, 특수 카메라가 단일 조합을 평가하는 데 약 1 분이 걸렸습니다. 엔지니어들은 많은 표준 최적화 기술을 시도했지만 아무것도 가까이 오지 않을 것입니다.

이전에 오픈 소스 커뮤니티에 유전자 프로그래밍 라이브러리를 발표했기 때문에 헤드 엔지니어가 저에게 연락했습니다. 그는 GP/GA가 도움이 될지 물었고 내가 참여할 수 있는지 물었다. 나는 약 한 달 동안 함께 일하면서 GA 라이브러리를 쓰고 조정하고 합성 데이터를 통합하고 시스템에 통합했습니다. 그런 다음 주말에 그들은 진짜와 함께 살게했습니다.

다음 월요일에 나는 그와 그들의 하드웨어 디자이너로부터 GA가 찾은 놀라운 결과를 아무도 믿을 수없는 방법에 대해이 빛나는 이메일을 얻었습니다. 이것이 바로 그랬습니다. 그해 말에 제품이 시장에 출시되었습니다.

나는 그것에 대해 1 센트를 지불하지 않았지만 '자랑'권리를 얻었습니다. 그들은 처음부터 그들이 이미 예산을 초과했다고 말했다. 그래서 나는 거래를 시작하기 전에 거래가 무엇인지 알았다. 그리고 가스의 적용을위한 훌륭한 이야기입니다. :)

나는 GA를 사용하여 결혼식 피로연에서 좌석 과제를 최적화했습니다. 10 개 이상의 테이블 80 명. 평가 기능은 사람들에게 데이트를 유지하고, 사람들을 공통적으로한데 모으고, 별도의 테이블에서 극단적 인 견해를 가진 사람들을 유지하는 데 기반을 두었습니다.

나는 그것을 여러 번 달렸다. 매번, 나는 9 개의 좋은 테이블과 하나는 이상한 공을 가지고 있습니다. 결국, 아내는 좌석 과제를했습니다.

여행하는 세일즈맨 최적화는 염색체의 신규 한 매핑을 여정에 사용하여 잘못된 투어를 생성 할 위험없이 염색체를 번식시키고 돌연변이하는 것이 사소했습니다.

업데이트: 두 사람이 어떻게 ...

자의적이지만 일관된 순서 (예 : 알파벳순으로 많은 손님) (또는 도시)로 시작하십시오. 이것을 참조 솔루션이라고 부릅니다. 손님의 지수를 좌석 번호로 생각하십시오.

염색체 에서이 순서를 직접 인코딩하는 대신 기준 솔루션을 새로운 솔루션으로 변환하기위한 지침을 인코딩합니다. 구체적으로, 우리는 염색체를 배열의 인덱스 목록으로 취급합니다. 염색체를 디코딩하기 위해 기준 솔루션으로 시작하여 염색체로 표시된 모든 스왑을 적용합니다. 배열에서 두 개의 항목을 교체하면 항상 유효한 솔루션이 발생합니다. 모든 게스트 (또는 도시)는 여전히 정확히 한 번 나타납니다.

따라서 염색체는 무작위로 생성, 돌연변이 및 다른 사람들과 교차 될 수 있으며 항상 유효한 용액을 생성 할 수 있습니다.

내가 사용하는 유전자 알고리즘(일부뿐만 아니라 관련 기술)을 결정하는 최적의 설정에 대한 위험을 관리하는 시스템을 유지하려고 노력하고 골드에서 농민들이 사용하는 도난당한 신용카드로 지불을 위해니다.시스템에서 몇 천 트랜잭션으로 알려진""값(사기 또는지)및 그 밖으로 최고의 조합을 설정되었을 제대로 식별하고 사기 거래에 필요없이 너무 많은 틀린 확실성.

우리는 데이터는 여러 가지 다스(boolean)적 특성의 트랜잭션의 각 주어진 값을 합계했습니다.는 경우 전체보다 더 높은 임계값,트랜잭션이 사기입니다.GA 들의 큰 숫자는 임의의 값 설정합,평가는 그들에 대한 모음을 알려진 데이터,사람을 선택하는 것을 얻었고 최고의(에서 모두 사기를 탐지하고의 수를 제한 거짓 긍정),다음 십자가 낳은 최고의 몇 가지로서 각 세대를 생산하는 새로운 세대의 후보자.후에는 특정 숫자의 세대 최고의 점수를 설정 값이었자가 승리자로 간주됩니다.

을 만들의 신체에 알려진 데이터가 테스트에 대한었 아킬레스의 시스템입니다.는 경우에 당신을 기다렸 환불을 몇 개월 뒤에 시도할 때에 응답하는,사기꾼 그래서 누군가가 수동으로 검토 큰 숫자의 거래를 구축하는 코퍼스의 데이터가 필요없이 너무 오래 기다립니다.

이 종료를 식별하는 대부분의 사기는 들어왔지만,대응할 수 없었습니다 그것은 아래의 1%에서 대부분의 사기가 발생하기 쉬운 항목(주의 90%이상이 들어오는 트랜잭션이 될 수 있는 사기,는 꽤 잘했).

나는 모두 이를 사용하여 perl.하나는 실행하는 소프트웨어에서 상당히 오래된 리눅스는 것을 1-2 시간여행(자가용 이용시 20 분 소 데이터를 로드하려면 WAN 링크의 나머지 부분이 소요되는 시간을 재정).의 크기는 주어진 세대에 의해 제한할 수 있다.나는 그것을 실행하는 운명을 극복하기 위해 약간의 변화를 매개 변수를 찾고,특히 좋은 결과를 설정합니다.

모두 모두 그것은 피부의 과실와 함께 제공되는 수동으로 변화를 가져오려고 노력하의 상대적인 값들을 수십 명의 사기 지표와 일관되게 함께했다 더 나은 솔루션을 만들 수 있습니다.AFAIK,그것은 여전히 사용(약 3 년 후에는 내가 쓴다).

축구 팁. 나는 AFL (호주 규칙 축구)에서 게임의 일주일에서 매주 결과를 예측하기 위해 GA 시스템을 구축했습니다.

몇 년 전에 나는 표준 작업 축구 풀에 지루해졌고, 모두가 온라인으로 가서 언론에서 일부 전문가에서 선택을 취하고있었습니다. 그래서, 나는 방송 저널리즘 전공을 이길 수는 없다고 생각했습니다. 나의 첫 번째 생각은 결과를 얻는 것이었다 Massey 등급 그리고 계절이 끝날 때 명성과 영광을 얻은 후 내 전략을 공개하십시오. 그러나 Massey가 AFL을 추적하지 않는 것을 발견 한 적이 없다는 이유로. Cynic In Me는 각 AFL 게임의 결과가 기본적으로 임의의 기회가 되었기 때문에 최근 규칙 변경에 대한 불만은 다른 포럼에 속한다고 생각합니다.

이 시스템은 기본적으로 불쾌한 강도, 방어 강도, 가정 필드 이점, 주에서 주에서 주에서 주에서주기 개선 (또는 그 부족) 및 이들 각각의 변화 속도로 간주됩니다. 이것은 시즌 동안 각 팀에 대해 일련의 다항식 방정식을 만들었습니다. 주어진 날짜에 대한 각 경기의 승자 및 점수를 계산할 수 있습니다. 목표는 과거 게임의 결과와 가장 밀접하게 일치하는 계수 세트를 찾아 다가오는 주 게임을 예측하기 위해 설정했습니다.

실제로이 시스템은 과거 게임 결과의 90% 이상을 정확하게 예측 한 솔루션을 찾을 것입니다. 그런 다음 다가오는 주 동안 게임의 약 60-80%를 성공적으로 선택할 것입니다 (즉, 훈련 세트의 주가 아닙니다).

결과 : 팩의 중간 바로 위. 주요 상금이나 라스베가스를 이길 수있는 시스템은 없습니다. 그래도 재미있었습니다.

나는 처음부터 모든 것을 만들었고, 프레임 워크가 사용되지 않았다.

여행 세일즈맨 및 변형과 같은 일반적인 문제뿐만 아니라 Roger Alsing의 모나 리사 프로그램, 나도 썼습니다 진화 적 스도쿠 솔버 (다른 사람의 아이디어를 재 구현하기보다는 내 입장에서 조금 더 독창적 인 생각이 필요했습니다). 스도커스를 해결하기위한 더 안정적인 알고리즘이 있지만 진화 적 접근 방식은 상당히 잘 작동합니다.

지난 며칠 동안 나는 진화론 프로그램을 가지고 놀면서 포커를위한 "콜드 데크"를 찾은 후 이 기사 Reddit에서. 현재는 만족스럽지 않지만 개선 할 수 있다고 생각합니다.

나는 가지고있다 내 자신의 프레임 워크 진화 알고리즘에 사용합니다.

회사가 1992 년화물 산업을 위해 개발 한 3D 레이저 표면 프로파일 시스템 용 홈 브루 GA를 개발했습니다.이 시스템은 3 차원 삼각 측량에 의존하고 512x512 카메라 (사용자 정의 캡처 HW 포함) 인 맞춤형 레이저 라인 스캐너를 사용했습니다. 카메라와 레이저 사이의 거리는 정확하지 않았으며 카메라의 초점은 256,256 위치에서 찾을 수 없었습니다!

표준 형상과 시뮬레이션 된 어닐링 스타일 방정식 해결을 사용하여 보정 매개 변수를 시도하고 해결하는 것은 악몽이었습니다.

유전자 알고리즘은 저녁에 채찍질되었고 나는 그것을 테스트하기 위해 교정 큐브를 만들었습니다. 큐브 치수를 높은 정확도로 알았으므로 GA가 생산 변동을 극복 할 각 스캐닝 장치에 대해 일련의 사용자 정의 삼각 측량 매개 변수 세트를 진화시킬 수 있다는 아이디어였습니다.

트릭은 치료를 받았습니다. 나는 최소한 말을하기 위해 플라 보그에 탔다! 약 10 세대 이내에 나의 '가상'큐브 (원시 스캔에서 생성되고 교정 매개 변수에서 재생성)는 실제로 큐브처럼 보였습니다! 약 50 세대 후에 나는 보정이 필요했습니다.

집을 칠할 때 정확한 색상 조합을 얻는 것은 종종 어렵습니다. 종종 당신은 색상을 염두에두고 있지만, 그것은 색상 중 하나가 아니며 공급 업체가 보여줍니다.

어제 GA 연구원 인 제 교수는 독일의 실화에 대해 언급했습니다 (죄송합니다. 더 이상 참조가 없습니다. 예, 요청이 있으면 찾을 수 있습니다). 이 사람 (그를 불러 자 컬러 가이)는 사람들이 정확한 색상 코드를 찾는 데 도움을주기 위해 도어 문에서 가곤했습니다 ( RGB) 그것은 고객이 생각한 것의 옷장이 될 것입니다. 그가 어떻게 할 것인가 :

그만큼 컬러 가이 GA를 사용한 소프트웨어 프로그램을 수행하는 데 사용되었습니다. 그는 4 개의 다른 색상으로 시작했습니다. 각각 코딩 된 염색체로 코딩했습니다 (디코딩 된 값은 RGB 값이 될 것입니다). 소비자는 4 가지 색상 중 1 개를 선택합니다 (이는 가장 가까운 사람이 생각합니다). 그런 다음 프로그램은 최대 값을 할당합니다 적합 그것에 개인 그리고 다음으로 이동합니다 세대 사용 돌연변이/교차. 위의 단계는 소비자가 정확한 색상을 찾은 다음 컬러 가이 그에게 RGB 조합을 말하는 데 사용되었습니다!

색상에 최대 피트니스를 할당함으로써 소비자가 생각하는 것에 닫힙니다. 컬러 가이의 프로그램은 소비자가 정확히 염두에두고 색상으로 수렴 할 가능성을 높이고 있습니다. 나는 그것이 꽤 재미 있다는 것을 알았다!

이제 -1을 얻었으므로 더 많은 -1을 계획하고 있다면 pls. 그렇게하는 이유를 설명하십시오!

학부 CompSCI 학위의 일환으로 Jikes Research Virtual Machine에 대한 최적의 JVM 플래그를 찾는 문제가 배정되었습니다. 이것은 콘솔로 시간을 반환하는 Dicappo 벤치 마크 스위트를 사용하여 평가되었습니다. 나는 벤치 마크 스위트의 런타임을 개선하기 위해이 깃발을 전환 한 분산 된 젠적 알로 지어를 썼지 만 결과에 영향을 미치는 하드웨어 지터를 보상하는 데 며칠이 걸렸습니다. 유일한 문제는 컴파일러 이론 (과제의 의도)에 대해 제대로 배우지 않았다는 것입니다.

초기 모집단을 기본 기본 플래그로 시드 할 수 있었지만 흥미로운 점은 알고리즘이 O3 최적화 수준과 매우 유사한 구성을 발견했지만 실제로 많은 테스트에서 더 빠릅니다).

편집 : 또한 나는 할당을 위해 Python에 나만의 유전자 알고리즘 프레임 워크를 작성했으며, Popen 명령을 사용하여 다양한 벤치 마크를 실행했지만, 평가 된 과제가 아니라면 Pyevolve를 살펴 보았을 것입니다.

우선 Jonathan Koza의 "유전자 프로그래밍"(아마존에서)는 많은 예와 함께 유전 적 및 진화 알고리즘/프로그래밍 기술에 관한 책입니다. 나는 그것을 확인하는 것이 좋습니다.

유전자 알고리즘의 저의 사용과 관련하여, 나는 (홈 재배) 유전자 알고리즘을 사용하여 객체 수집/파괴 시나리오를위한 떼 알고리즘을 발전시켰다 (실제 목적은 지뢰밭을 지울 수 있음). 다음은 링크입니다 종이. 내가 한 일의 가장 흥미로운 부분은 다단계 피트니스 기능이었습니다. 간단한 피트니스 기능이 유전자 알고리즘에 대한 충분한 정보를 제공 할 수있는 충분한 정보를 제공하지 않았기 때문에 필요했습니다.

몇 주 전에 나는 제안했다 솔루션 유전자 알고리즘을 사용하여 그래프 레이아웃 문제를 해결합니다. 제한된 최적화 문제의 예입니다.

또한 기계 학습 분야에서는 C/C ++의 GA 기반 분류 규칙 프레임 워크를 처음부터 구현했습니다.
나는 또한 훈련을 위해 샘플 프로젝트에서 GA를 사용했습니다. 인공 신경망 (Ann) 유명한 사람을 사용하는 것과는 반대로 역전 알고리즘.

또한 대학원 연구의 일환으로 교육에 GA를 사용했습니다. 숨겨진 마르코프 모델 EM 기반에 대한 추가 접근법으로 Baum-Welch 알고리즘 (C/C ++로 다시).

저는 기존 프로그램의 버그를 자동으로 수정하기 위해 Evolutionary Computation (EC)의 사용을 조사하는 팀의 일원입니다. 우리는 실제 소프트웨어 프로젝트에서 여러 가지 실제 버그를 성공적으로 수리했습니다 ( 이 프로젝트의 홈페이지).

이 EC 수리 기술의 두 가지 응용 프로그램이 있습니다.

  • 첫번째 (프로젝트 페이지를 통해 사용할 수있는 코드 및 재생산 정보) 기존 C 프로그램에서 구문 분석 된 추상 구문 트리를 발전시키고 자체 맞춤형 EC 엔진을 사용하여 OCAML에서 구현됩니다.

  • 두번째 (프로젝트 페이지를 통해 사용할 수있는 코드 및 재생산 정보), 프로젝트에 대한 개인적인 기여는 여러 프로그래밍 언어로 작성된 프로그램에서 편집 한 X86 어셈블리 또는 Java 바이트 코드를 발전시킵니다. 이 응용 프로그램은 Clojure에서 구현되며 자체 맞춤형 EC 엔진을 사용합니다.

진화 계산의 한 가지 좋은 측면 중 하나는이 기술의 단순성으로 인해 너무 많은 어려움없이 자신의 사용자 정의 구현을 작성할 수 있다는 것입니다. 유전자 프로그래밍에 대한 무료로 이용 가능한 입문 텍스트는 유전자 프로그래밍에 대한 현장 가이드.

동료와 저는 회사가 요구하는 다양한 기준을 사용하여 트럭에화물을 적재하기위한 솔루션을 연구하고 있습니다. 나는 그가 지점을 사용하는 동안 유전자 알고리즘 솔루션을 연구하고 있으며 공격적인 가지 치기와 결합했습니다. 우리는 여전히이 솔루션을 구현하는 과정에 있지만 지금까지는 좋은 결과를 얻었습니다.

몇 년 전 저는 GA를 사용하여 ASR (자동 음성 인식) 문법을 최적화하여 더 나은 인식 속도를 제공했습니다. 나는 상당히 간단한 선택 목록으로 시작하여 (GA가 각 슬롯에 대해 가능한 용어의 조합을 테스트하는 곳) 더 개방적이고 복잡한 문법으로 내려 갔다. 일종의 음성 거리 함수 하에서 항/시퀀스 사이의 분리를 측정함으로써 체력을 결정 하였다. 또한 문법에서 약하게 동등한 변형을 실험하여보다 컴팩트 한 표현으로 컴파일 한 것을 찾기 위해 실험했습니다 (결국 직접 알고리즘을 사용하여 응용 프로그램에서 사용할 수있는 언어의 크기가 크게 증가했습니다). .

최근에는 다양한 알고리즘에서 생성 된 솔루션의 품질을 테스트하기위한 기본 가설로 사용했습니다. 여기에는 크게 분류와 다양한 종류의 피팅 문제가 포함되어 있습니다 (즉, 검토자가 데이터 세트를 통해 선택한 일련의 선택을 설명하는 "규칙"을 만듭니다).

많은 문제를 해결하기 위해 "Galab"이라는 완전한 GA 프레임 워크를 만들었습니다.

  • 겹치기 및 블랭크 위치를 줄이기 위해 GSM 개미 (BTS)를 찾습니다.
  • 리소스 제약 프로젝트 일정.
  • 진화론 적 그림 창조. (Evopic)
  • 여행 세일즈맨 문제.
  • N-Queen & N-Color 문제.
  • 기사의 투어 및 배낭 문제.
  • Magic Square & Sudoku 퍼즐.
  • 슈퍼 스트링 문제에 기반한 문자열 압축.
  • 2D 포장 문제.
  • 작은 인공 생활 앱.
  • 루빅 퍼즐.

한 번 GA를 사용하여 메모리 주소에 대한 해시 기능을 최적화했습니다. 주소는 4K 또는 8K 페이지 크기 였으므로 주소의 비트 패턴에서 약간의 예측 가능성을 보여주었습니다 (최소 비트는 모두 제로가 거의없고 중간 비트가 정기적으로 증가하는 등). 세 번째 해시 버킷마다. 개선 된 알고리즘은 거의 완벽한 분포를 가졌습니다.

숙제가 계산되는지 모르겠습니다 ...

공부하는 동안 우리는 여행 세일즈맨 문제를 해결하기 위해 우리 자신의 프로그램을 출시했습니다.

아이디어는 몇 가지 기준 (문제, 성능을 매핑하기 어려운 어려움)을 비교하는 것이 었으며 다음과 같은 다른 기술도 사용했습니다. 시뮬레이션 어닐링.

그것은 꽤 잘 작동했지만 '생식'단계를 올바르게 수행하는 방법을 이해하는 데 시간이 걸렸습니다.

우리가 또한 신경망 등으로 덤벼 들기 때문에 흥미로운 코스였습니다.

누군가가 '프로덕션'코드에서 이런 종류의 프로그래밍을 사용했는지 알고 싶습니다.

내장 간단한 GA 추출하기 위한 유용한 패턴의 주파수 스펙트럼의 음악으로 재생되고 있습니다.출력하는 데 사용되었 드라이브 그래픽 효과에 winamp 플러그인입니다.

  • 입력:몇 FFT 프레임을(상상 2D 의 배열을 떠)
  • 출력:단일 float value(가중치의 합계 입력),thresholded0.0 1.0
  • 유전자:무게 입력
  • 피트니스 기능:의 조합 듀티 사이클,펄스 너비 및 BPM 이내에 합리적 범위에 있습니다.

나는 몇 가스속의 다른 부분에 스펙트럼 뿐 아니라 다른 BPM 한 제한,그래서 그들지 않는 경향이 있을 수렴으로 같은 패턴이다.출력에서 최고 4 에서 각각의 인구가 전송되었을 렌더링 엔진입니다.

흥미로운 부작용이었다는 평균 피트니스 전역 인구에 대한 좋은 지표 변화에서 음악지만,그것은 일반적으로 갔 4~5 초 동안 알아낼 것입니다.

내 논문의 일부로 나는 다목적 최적화 알고리즘 MPOEM (진화 된 개선 단계를 사용한 다목적 프로토 타입 최적화)을위한 일반적인 Java 프레임 워크를 썼으며, 이는 진화 개념을 사용하는 GA입니다. 모든 문제 독립적 인 부분이 문제 의존적 부분과 분리 된 방식으로 일반적이며, 문제 의존적 부분 만 추가하여 프레임 워크를 사용하도록 인터페이스가 편안됩니다. 따라서 알고리즘을 사용하려는 사람은 0에서 시작할 필요가 없으며 많은 작동을 용이하게합니다.

코드를 찾을 수 있습니다 여기.

이 알고리즘으로 찾을 수있는 솔루션은 최첨단 알고리즘 SPEA-2 및 NSGA와의 과학적 작업에서 비교되었으며 알고리즘이 메트릭에 따라 비슷하거나 더 잘 수행되는 것으로 입증되었습니다. 성능을 측정하고, 특히보고있는 최적화 프로젝트에 따라 사용하십시오.

당신은 그것을 찾을 수 있습니다 여기.

또한 논문과 작업 증명의 일환 으로이 프레임 워크를 포트폴리오 관리에서 발견 된 프로젝트 선택 문제에 적용했습니다. 회사에 가장 많은 가치를 더하는 프로젝트를 선택하고 회사의 전략을 대부분 지원하거나 다른 임의의 목표를 지원하는 것입니다. 예를 들어 특정 범주에서 특정 수의 프로젝트를 선택하거나 프로젝트 시너지의 최대화, ...

이 프레임 워크를 프로젝트 선택 문제에 적용하는 나의 논문 :http://www.ub.tuwien.ac.at/dipl/2008/ac05038968.pdf

그 후 나는 Fortune 500 중 하나의 포트폴리오 관리 부서에서 근무했으며, 이곳에서 GA를 프로젝트 선택 문제 / 포트폴리오 최적화에 적용한 상용 소프트웨어를 사용했습니다.

추가 리소스 :

프레임 워크의 문서화 :http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

MPOEMS 프레젠테이션 논문 :http://portal.acm.org/citation.cfm?id=1792634.1792653

실제로 약간의 열정으로 모든 사람들은 일반 프레임 워크의 코드를 임의의 다목적 최적화 문제에 쉽게 적용 할 수 있습니다.

직장에서 나는 다음과 같은 문제가있었습니다. M 작업과 N DSP가 주어지면 DSP에 작업을 할당하는 가장 좋은 방법은 무엇입니까? "Best"는 "가장로드 된 DSP의 부하를 최소화"하는 것으로 정의되었습니다. 다양한 유형의 작업이 있었고 다양한 작업 유형이 할당 된 위치에 따라 다양한 성능 파급 효과를 가졌으므로 "DNA 문자열"으로 작업 대 DSP 할당 세트를 인코딩 한 다음 유전자 알고리즘을 사용하여 "품종"을 사용했습니다. 내가 할 수있는 최고의 할당 문자열.

그것은 상당히 잘 작동했습니다 (이전 방법보다 훨씬 낫습니다. 가능한 모든 조합을 평가하는 것이 었습니다. 사소한 문제 크기에서 완료하는 데 몇 년이 걸렸을 것입니다!) 최적의 솔루션에 도달 한 경우. 현재의 "최선의 노력"이 충분한지를 결정할 수 있거나 더 잘할 수 있는지 확인하기 위해 더 오래 실행할 수 있습니다.

Codechef.com (그건 그렇고 월별 프로그래밍 경쟁)에서 경쟁이 있었는데, 이곳에서 해결할 수없는 스도쿠를 해결 해야하는 (가능한 한 거의 잘못된 Collumns/Rows/등으로 최대한 가깝게 이루어져야 함).

내가 할 일은 먼저 완벽한 스도쿠를 생성 한 다음 주어진 들판을 무시하는 것이 었습니다. 이 꽤 좋은 기준에서 나는 유전자 프로그래밍을 사용하여 솔루션을 개선했습니다.

스도쿠는 300x300이었고 검색이 너무 오래 걸렸기 때문에이 경우 결정 론적 접근법을 생각할 수 없었습니다.

간단한 유전자 알고리즘을 사용하여 이진 스트링으로 표시된 파동의 신호 대 노이즈 비율을 최적화했습니다. 수백만 세대에 걸쳐 특정 방식으로 비트를 뒤집어서 나는 변환을 생성하여 해당 파의 신호 대 노이즈 비율이 높아졌습니다. 알고리즘은 또한 "시뮬레이션 어닐링"일 수 있지만이 경우에는 사용되지 않았습니다. 그들의 핵심에서, 유전자 알고리즘은 간단하며, 이것은 내가 본 사용 사례의 간단한 것이 었으므로 생성 생성 및 선택에 프레임 워크를 사용하지 않았다-임의의 시드와 신호 대 잡음비 만있다. 당면한 기능.

학교의 세미나에서 우리는 뮤지컬 모드를 기반으로 음악을 생성하는 응용 프로그램을 개발합니다. 이 프로그램은 Java로 만들어졌으며 출력은 노래와 함께 MIDI 파일이었습니다. 우리는 음악을 생성하기 위해 GA의 독특한 aproachs를 사용합니다. 이 프로그램은 새로운 구성을 탐색하는 데 유용 할 수 있다고 생각합니다.

학부에서, 우리는 NERO (신경망과 유전자 알고리즘의 조합)를 사용하여 게임 내 로봇을 지능적으로 결정하도록 가르쳤다. 꽤 시원했습니다.

나는 식품 공급원 및 광산의 무작위 그리드 지형 세트를 통해 로봇 내비게이션의 멀티 스팅 된 스윙 기반 시뮬레이션을 개발했으며 로봇 염색체에 대한 로봇 행동의 최적화와 가장 적합한 유전자의 생존을 탐구하는 유전자 알고리즘 기반 전략을 개발했습니다. 이것은 각 반복주기의 차트 및 매핑을 사용하여 수행되었습니다.

그 이후로 나는 더 많은 게임 행동을 개발했습니다. 최근에 제작 한 예제 응용 프로그램은 영국에서 출발 및 목표 상태를 고려하여 경로에서 여행 판매 업체 문제를 해결하기위한 유전자 알고리즘뿐만 아니라 하나/다중 연결 포인트, 지연, 취소, 건설 공사, 러시 아워였습니다. 대중의 파업, 가장 빠른 노선과 가장 저렴한 경로 간의 고려. 그런 다음 경로가 주어진 날에 균형 잡힌 추천을 제공합니다.

일반적으로 저의 전략은 POJO 기반 유전자 대표자를 사용한 다음 선택, 돌연변이, 크로스 오버 전략 및 기준 지점에 대한 특정 인터페이스 구현을 적용하는 것입니다. 내 피트니스 기능은 기본적으로 휴리스틱 척도로 적용 해야하는 전략과 기준에 따라 상당히 복잡합니다.

또한 알고리즘이 논리를 이해하고 코드 수정에 대한 권장 사항이 포함 된 버그 보고서를 확인하려고 시도하는 체계적인 돌연변이주기를 사용하여 코드 내 자동 테스트에 유전자 알고리즘을 적용하는 것을 살펴 보았습니다. 기본적으로 내 코드를 최적화하고 개선을위한 권장 사항을 제공하는 방법과 새로운 프로그래밍 코드의 검색을 자동화하는 방법. 또한 다른 응용 분야 중에서 유전자 알고리즘을 음악 제작에 적용하려고 노력했습니다.

일반적으로, 나는 대부분의 Metaheuristic/Global 최적화 전략과 같은 진화 적 전략을 발견합니다. 처음에는 배우는 것이 느리지 만 솔루션이 목표 상태에 가까워지고 체력 기능과 휴리스틱이 생산하기에 잘 정렬되는 한 픽업을 시작합니다. 검색 공간 내의 수렴.

나는 한때 유전자 프로그래밍을 기반으로 한 게임의 컴퓨터 플레이어를 만들려고 노력했다. 각 프로그램은 일련의 움직임에 대한 평가 함수로 취급됩니다. 그럼에도 불구하고 제작 된 프로그램은 다소 작은 3x4 보드에서도 좋지 않았습니다.

나는 Perl을 사용하고 모든 것을 직접 코딩했습니다. 나는 오늘 다르게 일을 할 것입니다.

읽고 나서 블라인드 워치 메이커, 나는 Pascal 프로그램 Dawkins가 시간이 지남에 따라 진화 할 수있는 유기체 모델을 만들기 위해 개발했다고 말했다. 나는 내 자신의 사용을 쓸만큼 관심이 있었다 군단. 나는 그가 한 모든 멋진 동물 그래픽을 만들지는 않았지만 유기체가 생존 할 수있는 능력에 영향을 미치는 '염색체'통제 특성을 만들지 않았습니다. 그들은 단순한 세상에서 살았으며 서로와 환경에 맞서 싸울 수있었습니다.

유기체는 기회로 인해 부분적으로 살거나 죽었을뿐만 아니라 지역 환경에 얼마나 효과적으로 적응했는지, 영양소를 얼마나 잘 소비했는지, 얼마나 성공적으로 재생산되었는지에 근거합니다. 그것은 재미 있었지만 아내에게 내가 괴짜라는 증거도있었습니다.

얼마 전 였지만, HST (Hubble Space Telescope) 이미지에서 우주 광선 흔적을 제거하기 위해 사실상 이미지 처리 커널을 발전시키기 위해 GA를 굴 렸습니다. 표준 접근법은 허블로 여러 노출을 취하고 모든 이미지에서 동일한 물건 만 유지하는 것입니다. HST Time은 매우 가치가 있기 때문에 천문학 애호가이며 최근에 진화 계산에 관한 의회에 참석했습니다. 저는 GA를 사용하여 단일 노출을 정리하는 것에 대해 생각했습니다.

개인은 3x3 픽셀 영역을 입력으로 취하고 계산을 수행했으며 중앙 픽셀을 수정할지 여부와 방법에 대한 결정을 내린 나무의 형태였습니다. 피트니스는 출력을 전통적인 방식으로 정리 한 이미지와 비교하여 판단되었습니다 (즉, 스태킹 노출).

실제로는 효과가 있었지만 원래의 접근 방식을 고려하기에는 충분하지 않습니다. 논문에 시간이 제한되지 않았다면 알고리즘에 사용할 수있는 유전자 부분 빈을 확장했을 수도 있습니다. 나는 그것을 크게 향상시킬 수 있다고 확신합니다.

사용 된 라이브러리 : Astronomical Image Data Processing 및 I/O를위한 IRAF 및 CFITSIO를 올바르게 기억한다면.

나는 실험 GA 서 청소년들.썼 시뮬레이터에서는 파이썬는 다음과 같습니다.

유전자 인코딩된 무게의 신경 네트워크입니다.

신경망의 입력이 있었다"안테나"는 검출합니다.더 높은 값을 의미는 매우 가까운 0 의 감동하지 않습니다.

출력하는 두 개의"바퀴".는 경우에 두 바퀴가 앞으로,사람 앞으로 갔다.바퀴가 있었는 반대 방향으로,사람을 돌렸다.강도의 출력 결정의 속도 바퀴를 돌고 있다.

간단한 미로 생성 되었습니다.그것은 정말 간단합니다-어리석더라도.거기에 시작하면 화면 하단의와 목표로,상단에 네 개의 벽 사이 있습니다.각각의 벽을했다 공간을 찍은 임의로,그래서 항상있다.

I 임의의 시작들(나는 그들의 생각으로 버그)에서 시작합니다.로 한 사람은 목표에 도달,또는 제한 시간에 도달했고,피트니스 계산하였다.그것은 반비례한 거리에서 목표로 하는 시간입니다.

그때 나는 짝고"란"그들이 다음 세대를 생성.되는 확률 선택 사육되었에 비례하여합니다.때로는 이 의미는 하나가 자란 자기 자신과 반복적으로 있다면 매우 높은 상대적입니다.

나는 생각이 그들을 개발하"왼쪽 벽의 포옹"행동,하지만 그들은 항상하는 듯 따라가 적은 최적입니다.에 있는 모든 실험,버그 융합을 나선형 패턴이다.그들은 나선형의 바깥쪽으로까지 그들이 만지는 벽을 오른쪽에 있습니다.그들이 따라,그 다음 그들은 그들을 격차,그들은 아래로 나선형(텔에서 갭)및니다.그들이 만들 270 도 회전 왼쪽으로,다음 일반적으로 입력합니다.이 것이 그들을를 통해 대부분의 벽,그리고 종종 목표입니다.

하나의 기능을 추가했을 넣어서 색 벡터로 유전자를 추적 relatedness 개인 간.후 몇 세대에,그들은 모두 동일한 색상을 말해 내가 있어야 더 나은 번식 전략입니다.

을 알지도 모르겠다는 생각이 드는 그들을 개발하는 더 좋은 전략이다.나는 복잡한 신경 net--추가 메모리 및 모든 것입니다.그것은 도움이 되지 않았습니다.나는 항상 동일한 전략이다.

나와 같은 여러 가지 별도의 유전자 풀만 옮기 후에는 100 세대입니다.하지만 아무것도 그들을 밀어하면 더 좋은 전략이다.어쩌면 그것은 불가능합니다.

또 다른 흥미로운 것은 그래프 피트니스 시간.가 있었 명확한 같은 패턴을 최대한 피트니스 내려가기 전에 갈 것입니다.나는 본 적이 없다는 진화 예약에 대해 이야기는 가능성이다.

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