Научная статья на тему 'ОПТИМИЗАЦИЯ РАСЧЁТА БАЛАНСОВ ПРЕДПРИЯТИЙ ГОРНОДОБЫВАЮЩЕЙ ПРОМЫШЛЕННОСТИ'

ОПТИМИЗАЦИЯ РАСЧЁТА БАЛАНСОВ ПРЕДПРИЯТИЙ ГОРНОДОБЫВАЮЩЕЙ ПРОМЫШЛЕННОСТИ Текст научной статьи по специальности «Математика»

CC BY
34
7
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ГОРОНОПЕРЕРАБАТЫВАЮЩАЯ ПРОМЫШЛЕННОСТЬ / ОПТИМИЗАЦИЯ / ПРОГРАММИРОВАНИЕ

Аннотация научной статьи по математике, автор научной работы — Миловидова Анна Александровна, Порымов Иван Евгеньевич

Данная статья посвящена описанию способов сокращения времени для расчёта балансов ключевых документов по описанию деятельности предприятий горноперерабатывающей промышленности. Это позволит сэкономить временные и материальные ресурсы компании. Автором предлагается несколько способов ускорения расчёта, среди них: распрямление переносов продуктов, различные варианты сортировки продуктов, выделение приоритетных групп.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

OPTIMIZATION OF BALANCE SHEET CALCULATIONS FOR MINING INDUSTRY

This article describes ways to reduce the time needed to calculate the balances of key documents describing the activities of mining companies. This will save the company's time and material resources. The author suggests several ways to speed up the calculation, among them: straightening product transfers, various options for sorting products, highlighting priority groups.

Текст научной работы на тему «ОПТИМИЗАЦИЯ РАСЧЁТА БАЛАНСОВ ПРЕДПРИЯТИЙ ГОРНОДОБЫВАЮЩЕЙ ПРОМЫШЛЕННОСТИ»

ОПТИМИЗАЦИЯ РАСЧЁТА БАЛАНСОВ ПРЕДПРИЯТИЙ ГОРНОДОБЫВАЮЩЕЙ

ПРОМЫШЛЕННОСТИ

Миловидова Анна Александровна

Старший преподаватель кафедры СА У института СА У Государственный университет "Дубна " Порымов Иван Евгеньевич

бакалавр

Государственный университет "Дубна" OPTIMIZATION OF BALANCE SHEET CALCULATIONS FOR MINING INDUSTRY

Milovidova Anna Aleksandrovna

Senior Lecturer Dubna State University Porymov Ivan Bachelors degree Dubna state university DOI: 10.31618/nas.2413-5291.2020.1.57.256

АННОТАЦИЯ

Данная статья посвящена описанию способов сокращения времени для расчёта балансов ключевых документов по описанию деятельности предприятий горноперерабатывающей промышленности. Это позволит сэкономить временные и материальные ресурсы компании. Автором предлагается несколько способов ускорения расчёта, среди них: распрямление переносов продуктов, различные варианты сортировки продуктов, выделение приоритетных групп.

ABSTRACT

This article describes ways to reduce the time needed to calculate the balances of key documents describing the activities of mining companies. This will save the company's time and material resources. The author suggests several ways to speed up the calculation, among them: straightening product transfers, various options for sorting products, highlighting priority groups.

Ключевые слова: гороноперерабатывающая промышленность; оптимизация; программирование.

Keywords: mining industry; optimization; programming.

ВВЕДЕНИЕ

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

промышленности, является баланс. Его структура включает в себя названия используемой и производимой продукции, а также их массы в статьях прихода и расхода. Продукты состоят друг с другом в отношениях "зависимых" и "входных". Первый вид отношений подразумевает, что продукты должны пересчитаться после изменения массы данного, второй указывает на то, что расчёт данного продукта будет произведён на основе масс других. Продукты неразрывно связаны с технологическими переделами, где они были произведены или куда были отправлены на новый этап производства.

Все эти зависимости могут быть реализованы с помощью рекурсивного метода по расчёту масс продуктов и их компонентов, участвующих в составлении балансов. Однако, рекурсивные алгоритмы требуют большого количества ресурсов (особенно, если принять во внимание количество продуктов, исчисляемое десятками тысяч), что приводит к возрастанию длительности расчёта балансов. О способах сокращения этого времени на примере программной реализации на языке C# и

пойдёт речь в данной статье.

ОПТИМИЗАЦИЯ РАСЧЁТА БАЛАНСОВ

Ядром расчётного модуля является рекурсивный метод Evaluate(). Перед непосредственным запуском процедуры происходит сортировка продуктов в зависимости от количества зависимых значений (в исходной версии).

Прежде чем достичь пункта назначения часть продуктов проходит через несколько переделов, что естественно отражается на количестве пересчётов, а, следовательно, и на длительности расчёта. Поэтому была реализована процедура по «распрямлению» переделов - findStartProduct.

Если входное значение переносимого продукта в свою очередь имеет входное значение, то будет вызван метод по определению первоначального передела (см. рис. 1).

Если «родительский» продукт не равен найденному, то нужно изменить связи продуктов. Для сохранения точности расчёта, при перенесении продукта больше одного раза, удаляется ссылка на данный продукт у продукта с промежуточного передела и, при необходимости перезаписывается процент переноса (отдельные значения переходят не полностью).

Рисунок 1. Вызов метода fmdStartProduct

Метод по определению исходного передела является рекурсивным, его код представлен на рисунке 2.

Рисунок 2. Код метода fmdStartProduct

Проведение тестирования

продемонстрировало целесообразность

использования данной процедуры.

Затем было решено пересмотреть сортировку продуктов, ранее производившуюся только по количеству зависимых значений, в неё было добавлено второе звено - сортировка получившейся последовательности продуктов по количеству входных продуктов. Таким образом, наиболее востребованные из них оказывались на поверхности списка. Это принесло свои плоды. Записи файлов логирования свидетельствовали о сокращении времени расчёта. Суммарно на балансах с 2021 по 2027 год было сокращено полминуты (31 секунда). Точность расчёта иногда терялась, но за допустимые пределы - 15 тонн - не выходила.

Следующий этап был посвящён анализу отношений между продуктами и назначению приоритетов. Первоначально все продукты получали одинаковый приоритет - 20, он сохранится для продуктов, не имеющих зависимых, часть из них, примерно 2%, считается рассчитанной на момент добавления в список.

В конечном итоге представляющие наибольшую важность продукты сходятся на один суммарный передел. Логично было предположить, что установка высокого приоритета (22) конечным продуктам и тем, что имеют длинную цепочку зависимостей (из двух и более звеньев), позволит запустить в первую очередь нужные цепочки пересчётов. Продукт, названный «Невязка», который рассчитывается как разница между массами прихода и расхода, используется только для проверок и в расчёте других продуктов не участвует. Он получил самый низкий приоритет -0. С извлечениями и никем не требуемыми продуктами расхода схожая ситуация, их пересчёт, как зависимых, вызывался всякий раз после изменения массы главного по отношению к ним продукта, невзирая на их невостребованность. Значения продуктов данной категории рассчитываются в самом конце принудительно, то есть не в главном рекурсивном методе, а за его пределами. Для этого был организован цикл по пересчёту таких значений (рисунок 3).

Рис. 3. Расчёт продуктов с самым низким приоритетом

Продукты, имеющие единственное звено в цепочке зависимых значений, получали приоритет, равный 5.

Определение количества звеньев было возложено на процедуру checkDependentVal, код

которой представлен на рисунке 4. Она вызывается от каждого продукта, хранящегося в списке values и если количество зависимых значений у зависимых значений данного продукта больше одного, то процедура вернёт 0, в ином случае 1.

Рисунок 4. Код метода checkDependentVals

Назначение приоритетов происходило в процедуре setPriotet. Её код на рисунке 5.

Рисунок 5. Код метода setPriotet

Затем были совершены реформы в других частях кода. Сортировка обогатилась третьим звеном - идущие по убыванию приоритеты продуктов.

Расширение вариантов расчёта

спровоцировало новое изменений интерфейсной части, в книгу балансовой модели потребовалось добавить comboBox со следующими элементами: исходная версия, оптимизация, оптимизация + приоритеты. Эти варианты различаются способом сортировки продуктов и условиями прерывания

1518

1519

1520

1521

1522

1523

1524

1525

1526

1527

1528

1529

После этого первая часть метода расчёта приобрела вид, закреплённый на рисунке 7.

расчёта, распрямление переделов распространяется только на два последних.

Также было установлено, что выход из метода Evaluate после завершения расчётов всех продуктов почти никогда не срабатывал, обычно прерывание происходило из-за превышения количества итераций, поэтому была создано условие, которое завершало расчёт в случае отсутствия изменений в количестве рассчитанных продуктов на протяжении пяти итераций подряд (см. рис. 6).

notEvalCount = countMot ЕvalProdu ct;

countNotEvalProduct = values.Where(v => !v. evaluated && v .dependent_vals .Count != 0).Count(); //отсюда будет получено кол-во нерасчитанных на текущей итера1_

if (notEvalCount == countNotEvalProduct)

SCH++J else sch = 0;

if (¡values.Existsfv => !v.evaluated && v.dependent_vals.Count != 0) || (sch > 5 SS Лмст1.optimization.Соп1а1п5("0птимизация")))

Рисунок 6. Дополнительное условие прерывания расчёта

Лист1,с5 RefeienceData.cs ExportEngine.es BalanceModelEngine.cs -В X »

| Ш BalanceModelExcelAddln • \ BalanceModelExcelAddln,Balance - Evaluate*] -1

1457 1458 internal void EvaluateQ v pnoritet x - -» - X 1+1

1459 List<BmParameterValue> vals; Aa Ш J1 Current Document

1460 int notEvalCount = 0; //переменная создана для хранения количества неpaсчитанных продуктов на предыдущей итерации

1461 int sch = //счётчик, который будет задействован в блоке проверки на прерывание цикла while (true)

1462 List<BmParanieterValue> notEvalProduct = new List<BraParameterValue>()j //список пересчитанных продуктов

1463 //использование notEvalProduct экономит 3-4 секунды расчёта в отличии от values.Uhere(v => !v.evaluated && u.dependent_vals.Count 1= 0).Count()

1464

1465 if (Лист1.optimization.Contains("Исходная"))

1466 1467 I 1468 | vals = values. OrderByDeseending(x => x. dependent_vals. Count J .ToListQ; //расчет значений по убыванию количества зависимых, снижает время расчета

else if (Лист1.optimization.Сопга1п5("приоритеты"))

1469 vals = values.OrderByDescending(x => x.dependent_vals.Count).ThenByDescending(x => x.input_vals.Count).

1470 ThenByDescending(>c => x.priority).ToList();

1471 I //сортировка по количеству входных значений (no убыванию), затем по количеству зависимых показателей (по убыванию), затем по убыванию приоритетов

1472 I else

1473 I vals = values.QrderByDeseending(x => x.dependent_vals.Count).ThenByDeseending(x => x.input_vals.Count) .ToListO;

1474 1

1475 BmParameterValue MK_URF = (BirtParameterValue)GetValue(656, 1523, 17);//MK УРФ в плавку

1476 BmParaneterValue Minprok = (BniParameterValue)6etValue(03 0, 75)¡//Мощность Минпрок ■

1477 if (Minprok.val > 20090)

1478 i

1479 MKJJRF.f = null; ,

I486 14S1 HK URF.input vals.Clear(); i

1482

1483 while (true)

1484 | {

1485 if (Лист1.stopEval)

I486 break;

1487 if (iter >= maxlter)

1488 break;

1489

1490 //////// блок определения схемы расчёта |

1491 if (Лист1.optimization.Contains("Исходная"))

1492 foreach (BnParameterValue val in vals)//.Mftere(v => !v.evaluated)) ■

1493 if (!val.evaluated SS !val.toDelete && val.dependent_vals.Count != 0)

1494 val.Evaluate(new HashtableQ);

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

1495

1496 if (Лист1.optimization.Contains("приоритеты")) ■

1497 1498 foreach (BmParameterValue val in vals) if //(!val.evaluated £& !val.toDelete)

1499 (!val.evaluated && 'val.toDelete && val.dependent_uals.Count != 0 SS val.input_vals.Count != 0/* && val.priority = 22*/)

1500 1591 1502 val.Evaluate(new Hashtable());

if (Лист1.optinization == "Оптимизация")

1503 foreach (BmParameterValue val in vals)

1504 if (1val.evaluated && ¡val.toDelete &S val.dependent_vals.Count != 0 && val.input_vals.Count != 0)

1595 val.Evaluate(new Hashtable()); ▼

Рисунок 7. Считывание способа расчёта

Как было сказано ранее, важность имеет не только ускорение расчёта, но и сохранение точности. Предыдущие версии способов выделения групп продуктов с помощью приоритетов не подходили именно из-за проблем с точностью, описанная здесь полностью удовлетворяет заявленным требованиям.

Файлы логирования свидетельствуют о суммарном ускорении расчёта балансов 2021-2027 годов по сравнению с исходной версией на 51-53 секунды, по сравнению с предыдущим вариантом оптимизации на 21 -22 секунды. Длительность расчётов балансов разных лет в каждой из описанных версий расчёта представлены на рисунке 8.

Версия

Год Исходная Старая Приоритеты

2021 45 29 23

2022 47 34 33

2023 43 47 45

2024 35 46 39

2025 17 17 17

2026 9 15 9

2027 51 33 23

252 221 199

Рисунок 8. Длительности расчётов балансов для конфигурации 1

Далее были проведены расчёты на другой конфигурацияи (см. рис. 9).

Год Исходная Старая Приоритеты

2021 44 37 29

2022 44 41 31

2023 42 39 36

2024 27 15 23

2025 17 17 17

2026 3 16 9

2027 47 36 43

229 201 193

Рисунок 9. Длительности расчётов балансов для конфигурации 2

ЗАКЛЮЧЕНИЕ

Данная работа демонстрирует

зарекомендовавшие себя способы оптимизации расчёта балансов предприятий

горноперерабатывающей промышленности. Среди них распрямление переносов продуктов, изменение способов сортировки, а также создание групп продуктов в зависимости от их приоритета.

СПИСОК ЛИТЕРАТУРЫ

1. Рабочий проект Балансовая модель: Техническое задание на балансовую модель по цветным, драгоценным металлам и сере ЗФ ОАО «ГМК «Норильский никель» 2010 г.

2. Кайтмазов Н. Г. Производство металлов за Полярным кругом. Технологическое пособие — Норильск, 2006.

3. Металлоторг - режим доступа к изд.: http://www.metaltrade.rU/abc/b/balans.htm

УДК 658.512

УПОРЯДОЧЕНИЯ РАБОТ НА ТЕХНОЛОГИЧЕСКОЙ ЛИНИИ ПРИ НАЛИЧИИ ПЕРЕНАЛАДОК ОБОРУДОВАНИЯ

Сошников А.В.

Санкт-Петербургский государственный университет промышленных технологий и дизайна

RATIONAL ORDERING OF WORK ON THE PRODUCTION LINE IN THE PRESENCE OF

EQUIPMENT CHANGEOVERS

Soshnikov A. V.

St. Petersburg state University industrial technology and design DOI: 10.31618/nas.2413-5291.2020.1.57.260

АННОТАЦИЯ

Рассмотрена задача выбора рациональной очередности выполнения работ в технологических комплексах с последовательной структурой, широко распространенных в различных отраслях промышленности. Постановка задачи отличается учетом переналадок машин, входящих в линию, при смене выполняемых работ. Предложена многокритериальная модель задачи. Предложен подход и конкретные методы поиска рациональных вариантов упорядочения работ при запуске их на линию. Подход базируется на использовании принципов систематической эвристики, позволяющих генерировать ограниченное и управляемое с учетом производственных условий количество вариантов, среди которых, как предполагается, имеются и рациональные (практически приемлемые) варианты.

ABSTARCT

The method of rational ordering of work on the production line in the presence of equipment changeovers The problem of choosing a rational sequence of work in technological complexes with a consistent structure, widespread in various industries, is considered. The problem statement differs taking into account changeovers of the cars entering the line, at change of the performed works. A multicriteria model of the problem is proposed. The approach and specific methods of search of rational variants of ordering of works at their start on the line are offered. The approach is based on the use of the principles of systematic heuristics, which allow to generate a limited and manageable number of options, taking into account the production conditions, among which there are supposed to be rational (practically acceptable) options.

Ключевые слова: технологические линии, переналадки машин, очередность выполнения работ, многокритериальная модель, эвристические методы, Парето-оптимальные решения

Keywords: process lines, machine changeovers, sequence of work, multi-criteria model, heuristic methods, Pareto-optimal solutions.

Задача поиска оптимального или субоптимального порядка выполнения заданного множества работ на технологической линии при одинаковых маршрутах их движения подробно изучена в теории расписаний, и для нее имеются различные алгоритмы, в основном построенные на эвристических правилах назначения приоритетов [2],[3].

Критерием качества расписания часто выступает общее время выполнения работ. В традиционной постановке не учитываются возможные переналадки машин при смене выполняемых на них работ. Среди

производственных структур часто встречаются комплексы машин, формально не связанных в единую линию, работающих автономно, но по отношению к объекту обработки представляющие цепочки операций, выполняемых последовательно. Переналадки отдельных машин при смене работ достаточно часто имеют место на практике. В этом случае в такой технологической системе правомерно ставить задачу выбора очередности выполнения работ, при которой приближаются к своим наилучшим или нормативным значениям такие показатели как общее время выполнения работ, затраты на переналадки как отдельных

i Надоели баннеры? Вы всегда можете отключить рекламу.