>source

DEAP를 더 큰 프레임 작업에 통합해야합니다.

테스트를 위해 다음을 정의했습니다.

from deap import base
from deap import creator
from deap import tools
from collections import *
import random
NAME = 0
TYPE = 1
INITIAL = 2
MIN = 3
MAX = 4
CATEGORY = 5
IND_SIZE = 1
Data = OrderedDict()
Data['P1'] = ['distance' , float, 8.     ,7.9    ,8.1  , [] ]
Data['P2'] = ['velocity' , float, 80.    ,79.7   ,83.3 , [] ]
Data['P3'] = ['rigid'    , int  , 0      ,0      ,1    , ['false','true'] ]
toolbox = base.Toolbox()
for Key in Data:
    if Data[Key][TYPE] is float:
        toolbox.register(Data[Key][NAME], random.uniform, Data[Key][MIN], Data[Key][MAX])
    if Data[Key][TYPE] is int:
        toolbox.register(Data[Key][NAME], random.randint, Data[Key][MIN], Data[Key][MAX])
AttrSet = (toolbox.distance, toolbox.velocity,  toolbox.rigid)
toolbox.register("individual", tools.initCycle, creator.individual, AttrSet, IND_SIZE)

예상대로 실행되지만 프레임 워크가 다른 len() AttrSet 또한 변경되어야합니다

만드는 방법이 있습니까 AttrSet 데이터, 예 : 매개 변수가 등록 된 루프에서?

toolbox.register() 항상 None을 반환하므로 작동하지 않습니다.

  • 답변 # 1

    Python 내장 함수를 사용할 수 있습니다. getattr , 이름으로 개체의 속성을 가져올 수 있습니다.

    문서에 설명 된대로 : getattr(x, 'foobar') 다음과 같다 x.foobar .

    따라서 다음과 같이 할 수 있습니다.

    toolbox = base.Toolbox()
    AttrSet = set()
    for Key in Data:
        if Data[Key][TYPE] is float:
            toolbox.register(Data[Key][NAME], random.uniform, Data[Key][MIN], Data[Key][MAX])
        elif Data[Key][TYPE] is int:
            toolbox.register(Data[Key][NAME], random.randint, Data[Key][MIN], Data[Key][MAX])
        AttrSet.add(getattr(toolbox, Data[Key][NAME]))
    toolbox.register("individual", tools.initCycle, creator.individual, AttrSet, IND_SIZE)
    
    

관련 자료

  • 이전 python - Pandas 데이터 프레임에서 k 연속 행의 합계를 얻는 방법은 무엇입니까?
  • 다음 flutter - 이 파일이 자동으로 생성되는 이유 generated_plugin_registrantdart