, 나는 현재 유전자 퍼지 학습 시스템을 만들고 있으며, 이에 상응하는 교육 시뮬레이션 환경입니다.>이 함수 및 클래스 모음은 사용자가 다음과 같은 것들을 정의하는 마스터 스크립트에 의해 제어됩니다 : 시뮬레이션 시나리오, 컨트롤러 특성 등과도한 인수가있는 함수 - 파이썬
결과는 약 50 개의 서로 다른 numpy 배열과 목록이 내 특정 문제에 대한 인수로 나타납니다. 이러한 인수는 컨트롤러 생성 함수 및 각 컨트롤러의 효율성을 결정하는 시뮬레이션에 부여해야합니다. 이 프로세스는 현재 multiprocess.starmap_async 메소드를 사용하여 각 컨트롤러의 적합성을 병렬화합니다. 그래서 나의 마스터 스크립트는 약 50 개의 인수를 가진 컨트롤러 생성을 호출하고, 다중 프로세스는 약 55 개의 프로세스로 작업자를 호출하며, 작업자는 57 개의 입력으로 모든 시뮬레이션 파일을 호출합니다. (다중 처리를 위해이 많은 입력 인수를 사용하는 것이 데이터를 가리키는 이름 일뿐 아니라 복사 또는 다시 초기화하는 것보다 오버 헤드를 증가시키지 않는다는 것이 현재 나의 이해입니다 ... 잘못 되었다면 알려주세요!)
저는 50 개 인수를 모든 인수가 포함 된 하나의 목록으로 대체 할 수 있으며 마스터 스크립트에서 전역 변수를 활용하여이 모든 책 관리를 수행하지 않아도된다는 것을 알고 있습니다. 이 변수 중 많은 부분은 변경되지 않지만 두 번 이상 계산하지 않으려는 대용량 데이터 구조입니다. 다른 접근법과 가장 수용 가능한 것으로 생각되는 접근법이 있습니까? 내 프로젝트에서 모든 호출에 대해 10 줄의 args를 사용하지 않으려합니다.
모든 것이 완벽하게 실행되지만 내 시뮬레이션은 (옵션이 아닌) 인수가 늘어나면서 점점 더 복잡해질 것입니다. 나는 더 구체적인 VAR 이름을 모두 제거하지만, 여기 내 주요 스크립트가 실행 전화입니다했습니다
step = np.int8(pop_size/8)
pol = Pool(processes=8)
res = pol.starmap_async(SimWorker, ((i, i+step, map_size,Targets,
SAMS,SAMS_stat,AIS,AIS_stat,
B_mpammo,B_sdammo,Route,vel,B_range,
A_range,S_range,B_flight,
A_flight, S_flight,fitness,
ttr,ttb,ttcr,ttcb,pos,times,pop,... lots more args) for i in range(0, pop_size, step)))
그리고 SimWorker :
(opt_str,opt_fit) = Trainer(map_size,Targets,SAMS,SAMS_stat,AIS,AIS_stat,
B_mpammo,B_sdammo,Route,vel,B_range,A_range, S_range,B_flight,
A_flight, S_flight,... lots more)
을 내 GA 내부 내가 가진
for p in range(start, stop):
fitness[p] = Sim_T(map_size,Targets,SAMS,SAMS_stat,AIS,AIS_stat,
B_mpammo,B_sdammo,Route,vel,B_range,A_range,S_range,B_flight,
A_flight, S_flight,
ttr,ttb,ttcr,ttcb,pos,times,pop[p],... lots more)
일부 코드 스 니펫이나 다이어그램을 제공 할 수 있다면 매우 유용 할 것입니다. 일반적으로 매개 변수 수가 많은 함수는 디자인의 모듈성을 향상시킬 수 있다는 신호입니다. –