繁体   English   中英

为遗传算法创建初始解决方案Python

[英]Create initial Solution Python for Genetic Algorithms

请帮助创建带有以下条件的initial_solution变量:

结构体

population_list = {"LHS":[], "RHS": []}

字典元素的数量= population_size = 20

对于每个population_list元件"LHS""RHS"元素。

对于"LHS" ,具有两个job_count = 10元素,每个元素的长度定义一个列表:

max_sublot = [3, 5, 7, 6, 4, 2, 7, 9, 3, 5]

它的值是一个随机值[0,1),四舍五入到两位小数。

对于"RHS" ,共有max_sublot * mc_op元素。

max_sublot = [3, 5, 7, 6, 4, 2, 7, 9, 3, 5]
mc_op = [6, 14, 8, 5, 6, 9, 4, 6, 7, 2]

每个元素长度= 4,1个值是random of range job_count值,2个是根据max_sublot每个值的随机max_sublot ,3是范围operation_count = 10的随机数,4个是根据mc_op每个值随机mc_op

这是GA初始解决方案的演示,如下图所示: 在此处输入图片说明 在此处输入图片说明

作为我的意见,请您为它提供合适的数据结构,如下所示: 在此处输入图片说明

import numpy as np

population_size = 20
job_count = 10
operation_count = 10
max_sublot = [3, 5, 7, 6, 4, 2, 7, 9, 3, 5]
mc_op = [6, 14, 8, 5, 6, 9, 4, 6, 7, 2]

class Population_list(object):
    def __init__(self, LHS, RHS):
        self.LHS = LHS
        self.RHS = RHS

population_list = {"LHS":[], "RHS": []}
for i in range (population_size):
    for j in range(job_count):
        for s in max_sublot:
            lhs_random_num = list(np.random.random())
            population_list.update("LHS")
print(population_list)            

我想你需要这样的东西

population_size = 20
job_count = 10
operation_count = 10
max_sublot = [3, 5, 7, 6, 4, 2, 7, 9, 3, 5]
mc_op = [6, 14, 8, 5, 6, 9, 4, 6, 7, 2]
import numpy as np

def gen_population(population_size, max_sublot, mc_op, job_count):
    return tuple({'LHS': [gen_lhs(length) for length in max_sublot],
                  'RHS': gen_rhs(np.dot(max_sublot, mc_op), job_count, max_sublot, 10, mc_op)} for _ in range(population_size))


def gen_lhs(length):
    return [round(np.random.uniform(0,1),2) for _ in range(length)]

def gen_rhs(length, job_count, max_sublot, operation_count, mc_op):
    ret = []
    for i in range(length):
        new = []
        new.append(np.random.randint(job_count))
        new.append(np.random.choice(max_sublot))
        new.append(np.random.randint(operation_count))
        new.append(np.random.choice(mc_op))
        ret.append(new)
    return ret

gen_population(population_size, max_sublot, mc_op, job_count)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM