Проект состоит из главного класса Main – интерфейс модели, просчет показателей
Sector – задаёт описание полей записей excel файла
Simulation — эксперимент, для установки входных параметров модели
- SIMULATION
Элементы управления входными параметрами в Simulation
Входные параметры регулируемые из Simulation
choise | Тип территории |
verAll | Вероятность полного отказа |
verCrash | Вероятность поломки |
plaCost | Плановая стоимость |
masteringTime | Плановое время освоения |
Часть входных параметров из поключенного excel файла через компонент
Данные из файла считываются при инициализации эксперимента с помощью кода
и записываются в коллекцию sectors с типом элементов Sector
- MAIN
В пространство класса добавлено 7 областей для перехода в разные разделы интерфейса по нажатию на кнопки
Для перехода используется код типа <Область>.navigateTo()
Для связи с Simulation используются параметры
И через них уже поступают значения входных параметров Simulation
Длительность во времени процессов топоразведки и взрывных работ имитируется с помощью элементов
Это динамические таймеры, которые срабатываю через 3 ед.времени и по срабатыванию выполняется код
Таймер | Код | Назначение |
topEvent | if(randomTrue(verCrash)){ topoColor=red; evCase=»Поломка»; } else if(randomTrue(verAll)){ topoColor=red; evCase=»Отказ»; } else topoColor=green; | Разыграть поломку/отказ по заданным вероятностям во время топоразведки |
burstEvent | if(randomTrue(verCrash)){ burstColor=red; evCaseburst=»Поломка»; } else if(randomTrue(verAll)){ burstColor=red; evCaseburst=»Отказ»; } else burstColor=green; | Разыграть поломку/отказ по заданным вероятностям во время взрывных работ |
В классе Main есть два прямоугольника, которые цветом показывают в какой стадии находятся работы.
- желтый — работы ведутся
- красный – произошла поломка/отказ
- зеленый – работа успешно завершена
Если прямоугольник окрасился в красный, то при щелчке на него произойдёт переход в область интерфейса, где пользователь указывает увеличение плановой стоимости и времени всвязи с поломкой/отказом. Для перехода туда и отображения варианта решения возникшей проблемы используется код.
Код действия по нажатию на красный прямоугольник в области интерфейса для ТОПОРАЗВЕДКИ | if(topoColor==red){ viewTopoSoldArea.navigateTo(); for(Sector s:sectors) if(s.type.equals(choise) && s.problem.equals(evCase)) { crashAmount++; topoCaseText.setText(s.solid); if(randomTrue(0.5))break; } } |
Код действия по нажатию на красный прямоугольник в области интерфейса для ВЗРЫВНЫХ РАБОТ | if(burstColor==red){ viewBurstSoldArea.navigateTo(); for(Sector s:sectors) if(s.type.equals(choise) && s.problem.equals(evCaseburst)) { crashAmount++; burstCaseText.setText(s.solid); if(randomTrue(0.5))break; } } |
По завершению всех работ считаются показатели
С помощью функции outputCalc , содержащей код
int procenToTime=0; for(Sector s:sectors){ if(s.type.equals(choise)) procenToTime = s.addtime; break; } totalCost=planCost+topoAddCost+burstAddCost; totalTime=masteringTime+procenToTime*masteringTime/100 +topoAddTime+procenToTime*topoAddTime/100+burstAddTime+procenToTime*burstAddTime/100; timeOverrun=masteringTime+procenToTime*masteringTime/100-totalTime; |