<jupyter_start><jupyter_text>**Задача**$asd$*Ваша четвертая лабораторная работа будет заключаться в реализации одного из двух алгоритмов: метод имитации обжига или генетический алгоритм со встроенной эвристикой в виде локального поиска.  Алгоритмы реализуются для задачи Cell formation problem.* Реализовать можно на любом языке. Также нужно будет сравнить время работы алгоритма, а так же показать лучшее решение алгоритма, которое удалось найти вам. **Данные:**Данные для работы прикрепил архивом к письму. **Структура такая:** m p (number of machines and parts) Next m rows: m(row number) list of parts processed by machine m separated by space e.g: 1 9 17 19 31 33means machine 1 processes parts 9 17 19 31 33 **Выходной формат для ответов:** Output file: instancename.sol (e.g. 20x20.sol) Output file format: m1_clusterId m2_clusterId ... - machines to clusters mapping p1_clusterId p2_clusterId ... - parts to clusters mapping<jupyter_code>txtfiles = [f for f in os.listdir(PATH_TO_BENCHMARKS) if os.path.isfile(os.path.join(PATH_TO_BENCHMARKS, f))]
txtfiles
from algorithm import SimulatedAnnealing
from datetime import datetime
tools = imp.reload(tools)

SimulatedAnnealing = imp.reload(SimulatedAnnealing)
params = {
    'initial_temperature' : 10,
    'final_temperature'   : 0.002,
    'chain_len'           : 4,
    'len_of_period'       : 6,
    'numb_of_cells'       : 2,
    'check'               : 5,
    'cooling_rate'        : 0.7,
}
solutions = {}
for txt in txtfiles:
    print(txt)
    machine_part_matrix = tools.get_data(PATH_TO_BENCHMARKS + txt)
    cells_p, cells_m = tools.get_solution(machine_part_matrix, 2)

    SA = SimulatedAnnealing.SimulatedAnnealing(machine_part_matrix)
    SA.set_params(params)
    start = datetime.now()
    SA.solve()
    solutions[txt] = SA.S['best']
    print('time:', datetime.now() - start)
import collections
for sol in solutions:
    ret_p, ret_m = {}, {}
    for ch in ['p', 'm']:
        for ind in solutions[sol][ch]:
            list_of_cluster = [ind] * len(solutions[sol][ch][ind])
            list_of_val = solutions[sol][ch][ind]
            if ch == 'p':
                ret_p.update(dict(zip(list_of_val, list_of_cluster)))
            else:
                ret_m.update(dict(zip(list_of_val, list_of_cluster)))

    ret_p = collections.OrderedDict(sorted(ret_p.items()))
    ret_m = collections.OrderedDict(sorted(ret_m.items()))
    with open('solutions/' + sol, 'w') as the_file:
        line_m, line_p = "", ""
        for m in ret_m:
            line_m += str(m) + "_" + str(ret_m[m]) + " "
        for p in ret_p:
            line_p += str(p) + "_" + str(ret_p[p]) + " "
        the_file.write(line_m + '\n')
        the_file.write(line_p + '\n')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11333091173265529, 'fraction_numerical': 0.014892844169996368, 'mean_word_length': 3.3507109004739335, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '626883', 'license': 'MIT', 'n_tokens_mistral': 1029, 'n_tokens_neox': 1031, 'n_words': 246, 'path': 'CellFormation.ipynb', 'repo_name': 'CodeSopranos/CellFormation', 'size': '2753'}