python - 使用 DEAP 对多个变量进行多 Objective 优化
python - Multi-Objective optimization with multiple variables using DEAP
我正在尝试优化模拟软件的两个输出(我使用随机森林来训练模型以快速预测输出)。有七个输入变量,其中三个是连续的,其余的是离散的。我使用 DEAP 包进行多 objective 优化,但只有一个变量或一组相关变量(类似于背包)。提到的七个变量是:
n_rate = [0.1:0.5]
estim = [1000, 1500, 2000]
max_d = [1:20]
ft = [None, "rel"]
min_s = [2:1000]
min_m = [1:1000]
lim = [0:1]
除ft
外,对于所有连续变量,可以定义多个离散数。
我的问题是如何为这些输入创建不同的个体来定义人口?
您可以通过注册 "attributes" 来创建每个个体。这是我在代码中使用的内容:
toolbox.register("attr_peak", random.uniform, 0.1,0.5)
toolbox.register("attr_hours", random.randint, 1, 15)
toolbox.register("attr_float", random.uniform, -8, 8)
toolbox.register("individual", tools.initCycle, creator.Individual,
(toolbox.attr_float,toolbox.attr_float,toolbox.attr_float,
toolbox.attr_hours,
toolbox.attr_float, toolbox.attr_float, toolbox.attr_float,
toolbox.attr_hours,toolbox.attr_peak
), n=1)
在我的代码中,我在 toolbox
中注册了三个不同的 "genes" 或 "attributes"。在我的示例中,我有两个连续变量和一个整数约束变量。对于您的示例,这就是您定义属性的方式:
toolbox.register("n_rate", random.uniform, 0.1, 0.5)
toolbox.register("estim", random.choice, [1000,1500,2000])
toolbox.register("max_d", random.randint, 1, 20)
toolbox.register("ft", random.choice, [None, 'rel'])
toolbox.register("min_m", random.randint, 1, 1000)
toolbox.register("min_s", random.randint, 2, 1000)
toolbox.register("lim", random.randint, 0, 1)
然后你会像我 initCycle
.
一样构建你的个人
toolbox.register("individual", tools.initCycle, creator.Individual, (toolbox.your_attribute, toolbox.next_attribute, ... ), n=1)
我正在尝试优化模拟软件的两个输出(我使用随机森林来训练模型以快速预测输出)。有七个输入变量,其中三个是连续的,其余的是离散的。我使用 DEAP 包进行多 objective 优化,但只有一个变量或一组相关变量(类似于背包)。提到的七个变量是:
n_rate = [0.1:0.5]
estim = [1000, 1500, 2000]
max_d = [1:20]
ft = [None, "rel"]
min_s = [2:1000]
min_m = [1:1000]
lim = [0:1]
除ft
外,对于所有连续变量,可以定义多个离散数。
我的问题是如何为这些输入创建不同的个体来定义人口?
您可以通过注册 "attributes" 来创建每个个体。这是我在代码中使用的内容:
toolbox.register("attr_peak", random.uniform, 0.1,0.5)
toolbox.register("attr_hours", random.randint, 1, 15)
toolbox.register("attr_float", random.uniform, -8, 8)
toolbox.register("individual", tools.initCycle, creator.Individual,
(toolbox.attr_float,toolbox.attr_float,toolbox.attr_float,
toolbox.attr_hours,
toolbox.attr_float, toolbox.attr_float, toolbox.attr_float,
toolbox.attr_hours,toolbox.attr_peak
), n=1)
在我的代码中,我在 toolbox
中注册了三个不同的 "genes" 或 "attributes"。在我的示例中,我有两个连续变量和一个整数约束变量。对于您的示例,这就是您定义属性的方式:
toolbox.register("n_rate", random.uniform, 0.1, 0.5)
toolbox.register("estim", random.choice, [1000,1500,2000])
toolbox.register("max_d", random.randint, 1, 20)
toolbox.register("ft", random.choice, [None, 'rel'])
toolbox.register("min_m", random.randint, 1, 1000)
toolbox.register("min_s", random.randint, 2, 1000)
toolbox.register("lim", random.randint, 0, 1)
然后你会像我 initCycle
.
toolbox.register("individual", tools.initCycle, creator.Individual, (toolbox.your_attribute, toolbox.next_attribute, ... ), n=1)