
0. Что имеем на старте
-
Компания L****, находясь, в непростой для себя точке решает изменить модель бизнеса и принимает решение пойти в область IT. За 10 лет компания спроектировала и запустила в работу более 900 кожухотрубных теплообменников. На базе данного опыта решено было создать облачный сервис для автоматизированного подбора и проектирования кожухотруных теплообменных аппаратов.
-
Из первоначального штата компании (более 80 человек) в группу разработки вошли 6 человек:
-
Инженер-конструктор 1-ой категории (есть небольшой опыт на VBA)
-
Инженер-теплотехник 2-ой категории (без опыта программирования)
-
Инженер-теплотехник 3-ий категории (без опыта программирования)
-
Инженер-физик (без опыта программирования)
-
Инженер-химик (годовой курс по Python)
-
Инженер-математик (есть опыт программирования на PHP)
-
1. Подготовка
1.1. Выбор стека
Руководителем группы был выбран Инженер-математик, обладавший на тот момент наибольшим опытом программирования.
В качестве языка программирования был выбран Python по следующим ключевым причинам:
-
Простота синтаксиса
-
Поддержка ООП
-
Наличие большого количества готовых прикладных библиотек
В качестве среды разработки был выбран JupiterLab, тогда еще версии 2.0:

В качестве базы данных выбрали MySQL, поскольку у руководителя проекта в ней тоже был опыт работы )
1.2. Первый план на полгода
Первым шагом было создание плана разработки на полгода. Создан был план в корпоративной MediaWiki:

2. Обучение Python
Поскольку навыков программирования в Python не было ни у одного члена команды мы начали с самых азов.
В качестве ориентиров были бесплатный курс по Python от Яндекса и курс лекций от Тимофея Хирьянова.
Примеры, разобранные в учебных курсах мы сразу адаптировали под задачи нашего проекта, затем совместно разбирали данную тему уже на этих адаптированных примера и выполняли самостоятельное домашнее задание, которое тоже было адаптировано под нашу тематику. В итоге у нас получилось порядка 8 уроков.
Пример из урока по функциям
# Одна или несколько переменных в функции могут быть заданы по умолчанию # Но сначала в функции должны быть перечислены обязательные аргументы def F(Q = 1.5, dT = 10, k = 1600): return Q*10**6/(k*dT) print(F()) print(F(1.5,14)) print(F(dT=14, Q=1.5)) print(F(Q=1.5, dT=14)) # к берется по умолчанию равным 1600 print(F(Q=1.5, dT=14, k=2000))
Пример домашнего задания
# Ниже подготовлен массив свойств воды: # [tºС, ρ кг/м³, ср Дж/(кг×К), λ Вт/(м×К), μ н×с/м²] WP = [ [1,1000,4218,0.564,0.001790], [5,1000,4208,0.572,0.001549], [10,1000,4196,0.582,0.001306], [15,999,4191,0.591,0.001160], [20,999,4185,0.600,0.001002], [25,997,4183,0.608,0.000900], [30,996,4180,0.615,0.000798], [35,994,4180,0.622,0.000726], [40,993,4179,0.629,0.000653], [45,991,4180,0.635,0.000600], [50,988,4180,0.641,0.000547], [55,986,4172,0.646,0.000507], [60,984,4183,0.651,0.000467], [65,981,4186,0.656,0.000436], [70,978,4188,0.660,0.000404], [75,975,4192,0.664,0.000379], [80,972,4196,0.667,0.000355], [85,969,4201,0.670,0.000335], [90,966,4205,0.673,0.000315], [95,962,4211,0.676,0.000298], [100,959,4217,0.678,0.000282], [110,951,4230,0.682,0.000255], [120,944,4246,0.684,0.000232], [130,935,4265,0.685,0.000213], [140,926,4286,0.685,0.000197], [150,917,4310,0.684,0.000183], [160,908,4338,0.682,0.000170], [170,898,4369,0.679,0.000160], [180,887,4406,0.675,0.000150], [190,876,4447,0.669,0.000142], [200,865,4494,0.663,0.000134], [210,853,4548,0.656,0.000128], [220,840,4611,0.648,0.000122], [230,827,4683,0.639,0.000116], [240,814,4767,0.629,0.000111], [250,799,4865,0.618,0.000106], [260,784,4981,0.606,0.000102], [270,768,5120,0.592,0.000098], [280,751,5290,0.578,0.000094], [290,732,5490,0.562,0.000090], [300,712,5750,0.545,0.000086] ] print(WP[20][2]) # Задача: Написать функцию сведения теплового баланса # с любым одним необязательным параметром # Исходные данные (запрашиваются у пользователя) # t1, Цельсий - температура на входе в трубное # t2, Цельсий - температура на выходе в трубное # T1, Цельсий - температура на входе в межтрубное # T2, Цельсий - температура на выходе в межтрубное # g, кг/час - расход среды в трубном # G, кг/час - расход среды в трубном # Вывод программы: # t1 труб. вход = # t2 труб. выход = # T1 межтруб. вход = # T2 межтруб. выход = # g труб. = # G межтруб. = # Q труб. = # Q межтруб. =
3. Начало работы
На момент старта проекта в компании L**** был реализован механизм расчета теплообменника в виде Excel файла. Вот его вид:


Для перевода данного расчета на Python следовало решить ряд подготовительных задач:
-
Оцифровать графики TEMA для определения поправки Z
-
Построить коммуникацию через API с пакетом теплофизических свойств для решения задачи по сведению теплового баланса
-
Занести в базу данных таблицы из ГОСТа: 34347-2017 сосуды и аппараты стальные сварные. общие технические условия / 34347 2017
3.1. Оцифровка графиков TEMA
Вид графика из TEMA

Итоговый результат оцифровки

Результат перевода в массивы Python
Mas_7_11 = [ [ 0.1, [ [1.000000000000000, 0.499999999999999], [0.999322833180564, 0.613635531736094], [0.997093063158007, 0.664615593443683], [0.996832262423495, 0.737096845531233] ] ] ]
3.2. Связь по API с пакетом теплофизических свойств
Генерация разбивок
Интерактивный виджет в JupiterLab для построения разбивок

Посекторный расчет теплообменника
Визуализация процесса расчета в JupiterLab

Генетический алгоритм поиска решения
Генетическая игра «Мир кроликов»
Ссылка на GitHub: https://github.com/tau15/Rabbit_World

Параметры мира кроликов
# World values DNA_commands = 32 # Количество генов у каждого кролика Food_limit = 100 # Кол-во еды, генерируемое в мире Poison_limit = 0 Food_generation = 200 sleep_time = None Bots_num = 8 DNA_lenght = 32 Survivers = 2 Mutation = 1 Love = True Mutation_dna = 2
Устройство кролика 🙂

График корреляции массы аппарата и коэффициента теплопередачи К

Построение сетки решений и критериальный выбор лучшего решения
Блок-схема алгоритма построения сетки решений

ссылка на оригинал статьи https://habr.com/ru/post/651207/
Добавить комментарий