Диссертация (1137100), страница 14
Текст из файла (страница 14)
2012г.85.Романова И.К. Управление сложными техническими объектами. Ч.М.: Изд-воМГТУ им. Н.Э. Баумана, 2010. 80 с.959686.Семенкин Е.С., Семенкина О.Э., Коробейников С.П. Оптимизация техническихсистем. Учебное пособие. – Красноярск: СИБУП, 1996. 284 с.87.Семенкин, Е.С. Распределение ресурсов при управлении инновациямиреструктурированного предприятия ВПК / Е.С. Семенкин, В.М. Клешков, К.В.Гупалов, А.В. Гуменникова // – Красноярск: СибГАУ, 2004, с. 124-134.88.Соболь И.М., Статников Р.Б. Выбор оптимальных параметров в задачах сомногими критериями.
-- М.: Наука, 1982. -- 110 с.89.Соболь И.М., Статников Р.Б. Выбор оптимальных параметров в задачах сомногими критериями. М.: Дрофа , 2006. 175 с.90.Струнков Т. Что такое генетические алгоритмы / PC Week RE 19/99. URL:http://www.neuroproject.ru/gene.htm .91.Сушков Ю.А. Метод, алгоритм и программа случайного поиска // -- Л.:ВНИИТрансМаш, 1969. -- 43 с.92.СушковЮ.А.Многокритериальностьвмногорежимныхсистемах.//Архитектура и программное оснащение цифровых систем.
-- М.: МГУ, 1984. - С . 71-77.93.Сушков Ю.А. Об одном способе организации случайного поиска //Исследование операций и статистическое моделирование. -- Л. ЛГУ. 1972.Вып.1. -- С.180-185.94.Тягунов О.А. Выбор показателей качества при многокритериальной настройкепараметров систем управления // Мехатроника, автоматизация, управление.2008. № 4. С. 12-16.95.Хайниш С.В., Клешков В.М., Бородин А.Н.
Российское предприятие ВПК:выжить и развиваться. (На примере реформирования и развития Химзавода –филиала ФГУП «КРАСМАШ»). – М.: Рохос, 2003. – 240 с., цв. вкл. (Из опытауправленческого консультирования.)96.Хивинцев М.А., Акопов А.С. Распределенная эволюционная сеть для решениямногокритериальных оптимизационных задач в системах имитационногомоделирования // Бизнес-информатика. 2013. № 3 (25).
С. 35-41.969797.Черноруцкий И. Г. Методы оптимизации и принятия решений. -- СПб.: Лань,2001. -- 384 с.98.Черноруцкий И.Г. Методы принятия решений. СПб.: Изд-во БХВ-Петербург,2005. 416 с.99.Юдин Д.Б. Вычислительные методы теории принятия решений. – М.: Наука. Гл.ред. физ.-мат.
лит., 1989. – 320 с. (Теория и методы системного анализа.)9798Список сокращений и условных обозначенийMAGAMO – Multi-agent genetic algorithm for multi-objective optimization (многоагентный генетическийалгоритм для многокритериальной оптимизации)SPEA2 – Strength Pareto Evolutionary Algorithm (алгоритмы силы Парето)ИМ – имитационная модель, имитационное моделированиеЛПР – лицо, принимающее решениеПДТ – предприятие дистанционной торговлиПК – программный комплексРЭС – распределенная эволюционная сетьСИМ – система имитационного моделирования9899ПриложенияПриложение 1. Константы и формулы для расчета переменныхимитационной моделиТаблица 4.
Константы и формулы для расчета переменных имитационноймоделиНазвание переменной /константы% Невыкупленного покатегориям% доставки отстоимости заказа погородамEBITDA накопленнаяБазовая доступностьтоваров на складе поКатегориямБазовая себестоимостьИзмерениеФормула / значениеКатегории{25; 20; 22; 15; 17; 16; 15} %Города2%Категории060%Категории{8100; 8010; 20900; 10920; 4400; 4000; 1050}Базовая средняя ценана рынкеБазовая эластичность поценеКатегории{8500;8800;21000;11000;6500;5000;1200}Сегменты_клиентов;Категории-2Валовая прибыльARRSUM('Купят всего по Городам иКатегориям'*'Прибыль с 1 заказа')Влияние имиджа поСегментам клиентовСегменты_клиентов{0,8; 1,5; 1,2}ВлияниемаркетинговогопокрытияСегменты_клиентов{2,17*1,2; 2,17*1,5; 2,17*0,7}Влияние разницы отсреднерыночной поСегментам клиентовСегменты_клиентов{150%; 80%; 120%}Влияниеудовлетворенностиобслуживанием поСегментам клиентовВыручкаСегменты_клиентов{0,7; 1,5; 1,2}Выручка по ГородамГородаARRSUM('Выручка по Городам и Категориям')FOR(i=Города|ARRSUM('Выручка по Городам иКатегориям'[i]))99100Выручка по Городам иКатегориямГорода;Категории'Купят всего по Городам и Категориям'*'Цена в городеи по категории'Выручка по КатегориямКатегорииFOR(i=Категории|ARRSUM(TRANSPOSE('Выручка поГородам и Категориям')[i]))Готовность повторныхклиентов к следующейпокупкеДней исполнения заказапо ГородамДоля неликвидного отвозвратовДоля рынкаПериоды_покупкиFOR(i=Периоды_покупки|0,00014*i^2+0,0075*i+0,0075)/3Города{1; 3; 4; 5; 3; 8}Доступность товаров наскладе по КатегориямИзменение маркетингаКатегории60%Города;Сегменты_клиентов;Категории('Покрытие клиентской базы'-'Маркетингутечет')/1<<mo>>10%'Купят всего в этом периоде'/'Суммарный объемрынка'Изменениеудовлетворенности('Качество обработки заказа'-'Имиджутечет')/'Маркетинговые расходыобщие'*168000000/1<<mo>>Имидж утечет'Накопленный имидж'*'Уровень дисконта имиджа'ИнтенсивностьмаркетингаИнфляция накопленная1Инфляция накопленнаяпрошлого периодаИнфляция этогопериодаИсходное соотношениеклиентов по Сегментамв клиентской базеDELAYPPL('Инфляция накопленная';1<<mo>>;1)'Инфляция накопленная прошлогопериода'*(1+'Инфляция этого периода')0,15%Сегменты_клиентов{40%; 30%; 30%}100101Исходный Объем рынкапо Городам иКатегориямИсходный накопленныйимиджКачество обработкизаказаКачество прошлогопериодаКлиентская база поНеделям совершенияпоследней покупки иГородам ИсходноеКлиентская база помесяцам совершенияпоследней покупки иГородамКомиссия за зачислениеденегКомиссия с 1 заказаКупят все клиенты поГородам и Сегментам иКатегориямГорода;Категории{{35000;28125;11000;8750;26250;13125;26250};{20000;11250;5225;5000;15000;7500;15000};{14000;7500;3575;3500;10500;5250;10500};{12000;6250;3025;3000;9000;4500;9000};{10000;5000;2475;2500;7500;3750;7500};{9000;4375;2200;2250;6750;3375;6750}}101Периоды_покупкиFOR(i=Периоды_покупки|DELAYPPL('Степеньудовлетворенности качествомобслуживания'[i];1<<mo>>;0))Города;Периоды_покупки0Города;Сегменты_клиентов;Периоды_покупкиFOR(i=Города;j=Сегменты_клиентов;k=Периоды_покупки|'Клиентская база по Неделям совершенияпоследней покупки и ГородамИсходное'[i;k]*'Исходное соотношение клиентов поСегментам в клиентской базе'[j])Выручка*'Комиссия с 1 заказа'Города;Сегменты_клиентов;Категории1%'Купят повторные клиенты по Городам и Сегментамклиентов и Категориям'+'Купят новые клиенты поГородам и Сегментам и Категориям'Купят всего в этомпериодеКупят всего по ГородамARRSUM('Купят всего по Городам')ГородаFOR(i=Города|ARRSUM('Купят всего по Городам иКатегориям'[i]))Купят всего по Городами КатегориямГорода;КатегорииFOR(i=Города;j=Категории|(ARRSUM(TRANSPOSE('Купят все клиенты по Городам и Сегментам иКатегориям'[i])[j])))101102Купят всего по Городами Сегментам клиентовГорода;Сегменты_клиентовFOR(i=Города;j=Сегменты_клиентов|ARRSUM('Купятвсе клиенты по Городам и Сегментам иКатегориям'[i;j]))/'Среднее число покупок клиентом запериод'Купят всего поКатегориямКатегорииFOR(i=Категории|ARRSUM(TRANSPOSE('Купят всего поГородам и Категориям')[i]))Купят новые клиенты поГородам и Сегментам иКатегориямГорода;Сегменты_клиентов;Категории'Непокрытый объем рынка'*'Вероятность покупкиновыми клиентами'Маркетинг утечетГорода;Сегменты_клиентов;Категории'Маркетинговое покрытие накопленное'*'Уровеньдисконта маркетинга'Маркетинговаяактивность по городамМаркетинговаяактивность по городамПроверкаМаркетинговаяактивность покатегориямМаркетинговаяактивность покатегориям ПроверкаМаркетинговоепокрытие накопленноеГорода01.июнГорода;Сегменты_клиентов;Категории'Маркетинговое покрытие накопленное исходное'Маркетинговоепокрытие накопленноедля этого периодаГорода;Сегменты_клиентов;Категории'Маркетинговое покрытие накопленное'+'Покрытиеклиентской базы'Маркетинговоепокрытие накопленноеисходноеГорода;Сегменты_клиентов;Категории20%ARRSUM('Маркетинговая активность по городам')Категории01.июлARRSUM('Маркетинговая активность по категориям')102103Маркетинговыерасходы базовыеМаркетинговыерасходы общиеМаркетинговыерасходы периода поКатегориям и Городам1500000'Маркетинговые расходы базовые'*'Интенсивностьмаркетинга'Города;КатегорииНакопленный имиджFOR(i=Города;j=Категории|'Маркетинговые расходыобщие'*'Маркетинговая активность погородам'[i]*'Маркетинговая активность покатегориям'[j])'Исходный накопленный имидж'Не купят повторныеклиенты по Городам иСегментам клиентовГорода;Сегменты_клиентов;Периоды_покупкиFOR(i=Города;j=Сегменты_клиентов;k=Периоды_покупки|'Клиентская база по месяцам совершенияпоследней покупки и Городам'[i;j;k]-ARRSUM('Купятповторные клиенты по Городам и Сегментам клиентови Периодам'[i;j;k]))/'Среднее число покупок клиентомза период'Непокрытый объемрынкаГорода;Сегменты_клиентов;Категории'Объем рынка по Городам Сегментам и Категориями''Желающих приобрести из повторных клиентов поГородам и Сегментам клиентов'Норма управленческихрасходов на 10000заказовОборачиваемостьсклада по категориямОбщаяоборачиваемостьзапасовОбщаяоборачиваемостьзапасов НакопленнаяОбщие расходы надоставку по Городам10000000Категории{18; 28; 7; 18; 9; 21; 37}('Средневзвешенный срок исполнениязаказов'+'Средняя оборачиваемостьтоваров')/1<<mo>>0Города'Купят всего по Городам'*'Расходы на доставку 1заказа в Город'103104Объем рынка поГородам Сегментам иКатегориями прошлогопериодаГорода;Сегменты_клиентов;КатегорииFOR(i=Города;j=Сегменты_клиентов;k=Категории|DELAYPPL('Объем рынка по Городам Сегментам иКатегориями'[i][j][k];1<<mo>>;'Исходный Объем рынкапо Городам и Категориям'[i;k]*'Соотношение клиентовпо Сегментам'[j]))Объем рынка погородам и категориямГорода;КатегорииFOR(i=Города;j=Категории|(ARRSUM(TRANSPOSE('Объем рынка по Городам Сегментам и Категориями'[i])[j])))Объем рынка покатегориямКатегорииFOR(i=Категории|ARRSUM(TRANSPOSE('Объем рынкапо городам и категориям')[i]))Операционный расходыОбщие'Купят всего в этом периоде'*'Операционный расходына 1 заказ'Операционный расходына 1 заказ'Операционный расходы на 1 заказ при Базовомкачестве'*(0,5*EXP(1,5*'Качество обработки заказа'1,5)+0,5)Операционный расходына 1 заказ при БазовомкачествеПрибыль с 1 заказа350Города;КатегорииFOR(i=Города;j=Категории|'Цена в городе и покатегории'[i;j]-Себестоимость[j])Разница сосреднерыночной ценойГорода;Категории'Цена в городе и по категории'/'Средняя цена нарынке по городам'-1Расходы на доставку 1заказа в ГородРасходы на доставкуОбщиеСебестоимостьГорода{100; 150; 200; 150; 300; 400}КатегорииFOR(i=Категории|NORMAL('Базоваясебестоимость'[i]*'Инфляция накопленная';'Базоваясебестоимость'[i]*'Инфляция накопленная'*1%;0,9))Сезоннаяпотребительскаяактивность накопленнаяза прошлые периоды поКатегориямКатегорииFOR(i=Категории|DELAYPPL('Индекссезонности'[i];1<<mo>>;50%))ARRSUM('Общие расходы на доставку по Городам')104105Сезоннаяпотребительскаяактивность этогопериода по КатегориямСоотношение клиентовпо СегментамКатегории0%Сегменты_клиентов{60%; 20%; 20%}Среднее число покупокклиентом за периодСумма сегментовмаркетингаСуммарный объемрынкаУбыток от неликвидаСписание1,03Управленческиерасходы ОбщиеDIVZX('Купят всего в этом периоде';10000;0)*'Нормауправленческих расходов на 10000 заказов'Уровень дисконтаимиджаУровень дисконтамаркетингаУровень цень в городеФактор естественнойконкуренции для новыхклиентов10%ARRSUM('Целевые сегменты клиентов маркетинга')ARRSUM('Объем рынка по категориям')ARRSUM('Выручка по Категориям'*'% Невыкупленногопо категориям'*'Доля неликвидного от возвратов')20%ГородаФактор естественнойконкуренции дляповторных клиентов{0,9; 1; 1,1; 1,2; 0,95; 1,3}01.авг01.апрЦелевые сегментыклиентов маркетингаСегменты_клиентов100%/3Цена в городе и покатегорииГорода;КатегорииFOR(i=Города;j=Категории|'Цена товара'[j]*(1+'%доставки от стоимости заказа по городам'[i]))Цена товараКатегории{9000; 9000; 22000; 12000; 5000; 5000; 1500}Приложение 2.
Фрагмент программного кода реализации MAGAMOusingusingusingusingusingSystem;System.Collections.Generic;System.ComponentModel;System.Data.OleDb;System.Data;105106usingusingusingusingusingusingSystem.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;System.Threading;namespace MAGAMO{public partial class Form5 : Form{public Form5(){InitializeComponent();}private void Form5_Load(object sender, EventArgs e){numericUpDown2.Value = 10;textBox2.Text = "0.0001";int i =1;int cl = 2;String x1="";while(Convert.ToString(Program.frm3.axSpreadsheet1.get_Range(Program.frm3.axSpreadsheet1.Cells[i +1, 1]).Value2) != ""){x1 =Convert.ToString(Program.frm3.axSpreadsheet1.get_Range(Program.frm3.axSpreadsheet1.Cells[i +1, 2]).Value2);if (x1 != ""){axSpreadsheet3.Cells[1, cl] = Program.frm3.axSpreadsheet1.Cells[i + 1,1];cl++;}i++;}axSpreadsheet3.get_Range("A1:J1").Font.set_Bold(true);axSpreadsheet3.Columns.AutoFit();}private void button1_Click(object sender, EventArgs e){int i;String par;int n_ag;int Max_A = Convert.ToInt32(Program.frm4.numericUpDown1.Value); // Максимальноеколичество агентовint Max_Dec; // Максимальное количество параметров для оптимизацииList<Thread> threads = new List<Thread>(); // Создаем список АгентовList<String>[] par_name = new List<String>[Max_A]; // Создаем список DECISIONSдля каждого Агента//Строка подключения к БДstring database = Application.StartupPath + "\\base.accdb";string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +database + ";Persist Security Info=True";OleDbConnection connection = null;connection = new OleDbConnection(connectionString);connection.Open();106107OleDbCommand cmd0 = new OleDbCommand("delete from decisions_full", connection);cmd0.ExecuteNonQuery();OleDbCommand cmd1 = new OleDbCommand("delete from decisions", connection);cmd1.ExecuteNonQuery();OleDbCommand cmd2 = new OleDbCommand("delete from objectives", connection);cmd2.ExecuteNonQuery();cmd0.Dispose();cmd1.Dispose();cmd2.Dispose();//Присваниваение Потоку (Агенту) параметров оптимизацииfor (i = 0; i < Max_A; i++){int j = 2;par_name[i] = new List<String>(); //Инициализация списка показателей дляАгентовwhile(Convert.ToString(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[j,1]).Value2) != ""){if(Convert.ToString(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[j,6]).Value2) != ""){n_ag =Convert.ToInt32(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[j,6]).Value2);par =Convert.ToString(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[j,1]).Value2);if (i == n_ag){par_name[i].Add(par); //Добавляем показатель-decision к текущемуагентуpar = par.Replace("(", "[");par = par.Replace(")", "]");OleDbCommand cmd3 = new OleDbCommand("insert intodecisions(decision_name) values('"+par+"')", connection);cmd3.ExecuteNonQuery();cmd3.Dispose();}}j++;}}i = 0;while (i < Max_A) // Цикл по всем Агентам{int ag = i + 1; // Номер агентаdouble val = 100 * i; //Значение показателяMax_Dec = par_name[i].Count; // Количество DECISIONS для данного агентаString[] var_name = new String[Max_Dec]; //Массив названий параметров(DECISIONS) по которым будет выполняться оптимизация.int k = 0;foreach (var Dec in par_name[i]){var_name[k] = Dec.ToString();k++;}107108//Запуск Потоков-Агентовthreads.Add(new Thread(delegate() { GA(val,threads[i].Start();i++;ag, var_name); }));}connection.Close();foreach (var tr in threads){tr.Join(); //Ждем выполнения всех потоков}MessageBox.Show("Выполнено");}//РЕАЛИЗАЦИЯ ГЕНЕТИЧЕСКОГО АЛГОРИТМА НА УРОВНЕ АГЕНТА (ПРОЦЕССА)static void GA(double price, int agent_number, String[] const_name){int ga_count = Convert.ToInt32(Program.frm5.numericUpDown2.Value); // Максимальноеколичество прогонов генетического алгоритма//Строка подключения к БДstring database = Application.StartupPath+ "\\base.accdb";string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +database + ";Persist Security Info=True";OleDbConnection connection = null;connection = new OleDbConnection(connectionString);connection.Open();//Запуск подели PowerSimPsSimEng.SimulationProject Pr;PsSimEng.Simulation Sim;PsSimEng.SimulationEngine engine = new PsSimEng.SimulationEngine();Pr = engine.OpenProject(Program.frm1.textBox1.Text, "");Sim = Pr.OpenDefaultSimulation();// ИТЕРАЦИИ ГЕНЕТИЧЕСКОГО АЛГОРИТМАfor (int q = 1; q <= ga_count; q++){Sim.Reset();//Инициализируем значения DECISIONS относящихся к данному Агенту//Сперва загружаем значения показателей, рассчитанные всеми другими АгентамиOleDbDataReader reader = null;OleDbCommand cmd5 = new OleDbCommand("select * from decisions", connection);reader = cmd5.ExecuteReader();while (reader.Read()){Sim.get_Value(Convert.ToString(reader[1])).Number = reader[2];}cmd5.Dispose();//Затем обновляем свои собственные показатели новыми лучшими значениями изпопуляции генетического алгоритмаfor (int i = 0; i < const_name.Count(); i++){const_name[i] = const_name[i].Replace("[", "(");const_name[i] = const_name[i].Replace("]", ")");108109int row =Program.frm4.axSpreadsheet2.get_Range("A1:A10000").Find(const_name[i]).Row;double l_bound =Convert.ToDouble(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[row,3]).Value2);double r_bound =Convert.ToDouble(Program.frm4.axSpreadsheet2.get_Range(Program.frm4.axSpreadsheet2.Cells[row,4]).Value2);const_name[i] = const_name[i].Replace("(", "[");const_name[i] = const_name[i].Replace(")", "]");Sim.get_Value(const_name[i]).Number = (l_bound + r_bound) / 2; //Инициализируем новым лучшим значением рассчитанным с помощью ГА}double CurrentTime = Sim.StartTime;//Прогон модели PowerSim для расчета OBJECTIVESwhile (CurrentTime < Convert.ToDouble(Program.frm3.axPsEngineCtrl1.StopTime)){Sim.Advance();CurrentTime = CurrentTime + Convert.ToDouble(Sim.TimeStep);}//Результаты симуляции.