2016-02-20 7 views
0

Я хочу решить проблему планирования заданий заданий с использованием генетического алгоритма, и код будет написан на Python.Python: упорядочение частичных элементов в списке для генетического алгоритма

В настоящее время я представляю человека в виде списка [job, operation, machine, operation]. Например, вот пример одной хромосомы:

jobs = [ [1,3,3,2], [3,3,1,3], [1,1,1,4], [2,2,1,4], [2,3,3,4], [3,1,3,3], [2,1,2,1], [1,2,2,3], [3,2,2,2] ] 

Список должен удовлетворять операции очередностью для каждого задания, например, правильный порядок работы 1 в списке

[1,1,1,4], [1,2,2,3], [1,3,3,2] 

Другими словами , Я должен сделать заказ для задания 1 (индекс 0, индекс 2 и индекс 7) только тогда, когда остальные задания остаются в их положении. Правильный результат будет:

jobs = [ [1,1,1,4], [3,3,1,3], [1,2,2,3], [2,2,1,4], [2,3,3,4], [3,1,3,3], [2,1,2,1], [1,3,3,2], [3,2,2,2] ] 

Моя попытка до сих пор:

Определить/фильтровать все строки, которые содержат задания 1:

[row[:][:] for row in jobs if row[0]==1] 

выход

[[1, 1, 1, 4], [1, 2, 2, 3], [1, 3, 3, 2]] 
+0

@ 0k Я пытаюсь: 1. определить/фильтровать все строки, содержащие задание 1, то есть >>> [row [:] [:] для строки в заданиях, если строка [0] == 1] [[1 , 1, 1, 4], [1, 2, 2, 3], [1, 3, 3, 2]] – user2090593

ответ

0

Прямой способ сделать это - сделать временный список заданий с нужным номером задания и отсортировать этот временный список. Затем вам нужно заменить исходные элементы на отсортированные, и для правильной работы вам необходимо отслеживать их позиции в списке заданий.

j0 = [[1,3,3,2], [3,3,1,3], [1,1,1,4], [2,2,1,4], [2,3,3,4], 
    [3,1,3,3], [2,1,2,1], [1,2,2,3], [3,2,2,2]] 
print(j0) 

j1 = [[1,1,1,4], [3,3,1,3], [1,2,2,3], [2,2,1,4], [2,3,3,4], 
    [3,1,3,3], [2,1,2,1], [1,3,3,2], [3,2,2,2]] 
print(j1) 

def sortjob(alljobs, jobnum): 
    #get jobs with this jobnum 
    indices = [] 
    jobs = [] 
    for i, v in enumerate(alljobs): 
     if v[0] == jobnum: 
      indices.append(i) 
      jobs.append(v) 

    jobs.sort() 
    #put the sorted jobs back into the correct locations 
    for i, v in zip(indices, jobs): 
     alljobs[i] = v 

sortjob(j0, 1) 
print(j0)  

выход

[[1, 3, 3, 2], [3, 3, 1, 3], [1, 1, 1, 4], [2, 2, 1, 4], [2, 3, 3, 4], [3, 1, 3, 3], [2, 1, 2, 1], [1, 2, 2, 3], [3, 2, 2, 2]] 
[[1, 1, 1, 4], [3, 3, 1, 3], [1, 2, 2, 3], [2, 2, 1, 4], [2, 3, 3, 4], [3, 1, 3, 3], [2, 1, 2, 1], [1, 3, 3, 2], [3, 2, 2, 2]] 
[[1, 1, 1, 4], [3, 3, 1, 3], [1, 2, 2, 3], [2, 2, 1, 4], [2, 3, 3, 4], [3, 1, 3, 3], [2, 1, 2, 1], [1, 3, 3, 2], [3, 2, 2, 2]] 

Обратите внимание, что sortjob изменяет список, который вы передаете его, так же, как метод list.sort делает, и соответствует конвенции Python для таких функций sortjob возвращает None.

+0

Большое спасибо. Мой урок python не охватывает перечисление, но еще не зашифровано. Я буду многому учиться. Благодаря @PM 2Ring – user2090593

 Смежные вопросы

  • Нет связанных вопросов^_^