Информационная система поддержки принятия решений в условиях многокритериальной оптимизации
Основные понятия теории принятия решений. Формализация задач принятия решений. Однокритериальные и многокритериальные задачи в условиях определенности. Методы оценки многокритериальных альтернатив. Методы построения аддитивной функции полезности.
Рубрика | Менеджмент и трудовые отношения |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 08.07.2014 |
Размер файла | 2,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
import core. Item;
import core. Packer;
import core. Store;
import core. Packer. ALGORYTHM;
class ResultViewer {
private class Resume {
private String algNameReport;
private String effectivityReport;
private String restReport;
private String packedReport;
private DecimalFormat format;
public Resume () {
DecimalFormatSymbols f = new DecimalFormatSymbols ();
f. setDecimalSeparator ('. ');
format = new DecimalFormat ("#,##0.00", f);
}
/**
* @param algNameReport the algNameReport to set
*/
public void setAlgNameReport (String algNameReport) {
this. algNameReport = "<h2><font color='RED'>Алгоритм: " + algNameReport + "</text></h2><p>";
}
/**
* @param effectivityReport the effectivityReport to set
*/
public void setEffectivityReport (SortedMap<Container, List<Item>> map) {
String header = "<h3><font color='RED'>Эффективность алгоритма</font></h3>";
double occupiedSpacePercent = 0;
double loadPercent = 0;
double volumeAccumulator = 0;
double weightAccumulator = 0;
double iVolumeAccumulator = 0;
double cargoAccumulator = 0;
for (Container c: map. keySet ()) {
for (Item i: map. get (c)) {
iVolumeAccumulator += i. getVolume ();
weightAccumulator += i. getWeight ();
}
volumeAccumulator += c. getVolume ();
cargoAccumulator += c. getCargo ();
}
occupiedSpacePercent = (iVolumeAccumulator / volumeAccumulator) * 100;
loadPercent = (weightAccumulator / cargoAccumulator) * 100;
String occupiedSpacePercentString = getFormattedPair ("Процент заполнения пространства контейнеров", occupiedSpacePercent);
String loadPercentString = getFormattedPair ("Процент загрузки контейнеров", loadPercent);
String loadedItemsMass = getFormattedPair ("Общая масса упакованных объектов", weightAccumulator);
String loadedItemsVolume = getFormattedPair ("Общий объём упакованных объектов", iVolumeAccumulator);
String effectivityReport = occupiedSpacePercentString + loadPercentString + loadedItemsVolume + loadedItemsMass;
this. effectivityReport = header + effectivityReport;
}
/**
* @param restReport the restReport to set
*/
public void setRestReport (Store store) {
String header = "<h3><font color='RED'>Остаток на складе</font></h3>";
double volumeAccumulator = 0;
double weightAccumulator = 0;
for (Item i: store. getRest ()) {
volumeAccumulator += i. getVolume ();
weightAccumulator += i. getWeight ();
}
String restVolume = getFormattedPair ("Общий объём оставшихся объектов", volumeAccumulator);
String restWeight = getFormattedPair ("Общий вес оставшихся объектов", weightAccumulator);
this. restReport = header + restVolume + restWeight;
}
/**
* @param packedReport the packedReport to set
*/
public void setPackedReport (SortedMap<Container, List<Item>> map) {
String packedReport = "<h3><font color='RED'>Упакованные объекты</font></h3>";
for (Container c: map. keySet ()) {
String containerID = "Контейнер ";
String itemsID = "Объекты: ";
String freeSpace = "Свободное место в контейнере: ";
String freeCargo = "Неиспользованная грузоподъёмность: ";
double iVolumeAccumulator = 0;
double iWeightAccumulator = 0;
containerID += c. getId () + "<br>";
for (Item i: map. get (c)) {
itemsID += " " + i. getId ();
iVolumeAccumulator += i. getVolume ();
iWeightAccumulator += i. getWeight ();
}
itemsID += "<br>";
freeSpace += (c. getVolume () - iVolumeAccumulator) + "<br>";
freeCargo += (c. getCargo () - iWeightAccumulator) + "<br>";
packedReport += containerID + itemsID + freeSpace + freeCargo + "<br>";
}
this. packedReport = packedReport;
}
/**
* @return the algNameReport
*/
public String getAlgNameReport () {
return algNameReport;
}
/**
* @return the effectivityReport
*/
public String getEffectivityReport () {
return effectivityReport;
}
/**
* @return the restReport
*/
public String getRestReport () {
return restReport;
}
/**
* @return the packedReport
*/
public String getPackedReport () {
return packedReport;
}
private String getFormattedPair (String string, double value) {
return "<font color='BLUE'>" + string + ": " +
"<font color='GREEN'><b>" + format. format (value) + "</b></font></font><br>";
}
}
private class ConsoleLogTextPane extends JTextPane {
/**
*
*/
private static final long serialVersionUID = - 5691372469851601341L;
private String TEMPLATE = "<html><title></title><body></body></html>";
private String buffer;
private int breakIndex;
public ConsoleLogTextPane () {
setText (TEMPLATE);
setContentType ("text/html");
breakIndex = 0;
}
public void addString (String str) {
buffer = this. getText ();
breakIndex = buffer. lastIndexOf ("</body>");
buffer = buffer. substring (0, breakIndex) + str + buffer. substring (breakIndex);
this. setText (buffer);
}
public void clearConsole () {
this. setText (TEMPLATE);
}
}
class AlgorythmsComboBoxModel implements ComboBoxModel<String> {
private Set<ListDataListener> listeners;
private List<String> elements;
private String selected;
public AlgorythmsComboBoxModel (String. strings) {
listeners = new HashSet<ListDataListener> ();
elements = new ArrayList<String> ();
selected = "";
for (String s: strings) {
elements. add (s);
}
}
@Override
public void addListDataListener (ListDataListener l) {
listeners. add (l);
}
@Override
public String getElementAt (int index) {
return elements. get (index);
}
@Override
public int getSize () {
return elements. size ();
}
@Override
public void removeListDataListener (ListDataListener l) {
listeners. remove (l);
}
@Override
public Object getSelectedItem () {
return selected;
}
@Override
public void setSelectedItem (Object anItem) {
selected = (String) anItem;
}
}
class ResultTreeCellRenderer implements TreeCellRenderer {
private JLabel label = new JLabel ();
@Override
public Component getTreeCellRendererComponent (JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
if ( (value! = null) && (value instanceof DefaultMutableTreeNode)) {
ImageIcon icon = null;
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObject = node. getUserObject ();
if (userObject instanceof Container) {
icon = new ImageIcon (ResultViewer. class. getResource ("images/Container. png"));
label. setText ("Контейнер, ID: " + ( (Container) userObject). getId ());
} else if (userObject instanceof Item) {
icon = new ImageIcon (ResultViewer. class. getResource ("images/Item. png"));
label. setText ("Объект, ID: " + ( (Item) userObject). getId ());
} else if (userObject instanceof String) {
if (node. getParent () == null ||
node. getParent () == value) {
icon = new ImageIcon (ResultViewer. class. getResource ("images/Containers. png"));
} else {
icon = new ImageIcon (ResultViewer. class. getResource ("images/Field. png"));
}
label. setText ( (String) node. getUserObject ());
}
label. setOpaque (true);
if (selected) {
label. setBackground (new DefaultTreeCellRenderer (). getBackgroundSelectionColor ());
} else {
label. setBackground (new DefaultTreeCellRenderer (). getBackgroundNonSelectionColor ());
}
label. setIcon (icon);
}
return label;
}
}
private JPanel viewer;
private JTree tree;
private JPanel treePanel;
private JPanel cBoxPanel;
private JButton packButton;
private JButton clearConsoleButton;
private ConsoleLogTextPane resumeLoggerPane;
private JSplitPane splitPane;
private JComboBox<String> algorythmsBox;
private Hashtable<String, Packer. ALGORYTHM> table;
private final String NO_ALGORYTHM_CHOSEN = "Выберите алгоритм";
private final String FIRST = "В первый подходящий";
private final String BEST = "В лучший из подходящих";
private Resume resume;
public ResultViewer (final GUI gui, final Store store, final Packer packer, final Boss boss) {
resumeLoggerPane = new ConsoleLogTextPane ();
resumeLoggerPane. setEditable (false);
resume = new Resume ();
DefaultMutableTreeNode top = new DefaultMutableTreeNode (" [пусто] ");
table = new Hashtable<String, Packer. ALGORYTHM> ();
table. put (FIRST, ALGORYTHM. FIRST);
table. put (BEST, ALGORYTHM. BEST);
algorythmsBox = new JComboBox<String> (new AlgorythmsComboBoxModel (NO_ALGORYTHM_CHOSEN, FIRST, BEST));
algorythmsBox. setSelectedIndex (0);
algorythmsBox. addItemListener (new ItemListener () {
@SuppressWarnings ("unchecked")
@Override
public void itemStateChanged (ItemEvent arg0) {
packButton. setEnabled ( ( (JComboBox<String>) arg0. getSource ()). getModel (). getSelectedItem ()! = NO_ALGORYTHM_CHOSEN &&
store. getParetoSetInstance ()! = null &&
! store. getParetoSetInstance (). isEmpty ());
}
});
packButton = new JButton ("Упаковать");
packButton. setEnabled (false);
packButton. addActionListener (new ActionListener () {
@Override
public void actionPerformed (ActionEvent arg0) {
if (store! = null) {
store. getRest (). clear ();
if (store. getParetoSetInstance ()! = null) {
List<List<Integer>> templates = store. getTemplates ();
double maxUtilityRate = 0;
int maxUtilityIndex = 0;
SortedMap<Container, List<Item>> map = null;
for (int i = 0; i < templates. size (); i++) {
map = store. getMapClone (i);
for (List<Item> paretoLayer: store. getParetoSetClone ()) {
packer. pack (map, paretoLayer, table. get (algorythmsBox. getSelectedItem ()));
}
double utilityRate = boss. getPackUtility (map);
if (maxUtilityRate < utilityRate) {
maxUtilityRate = utilityRate;
maxUtilityIndex = i;
}
store. getRest (). clear ();
}
map = store. getMapClone (maxUtilityIndex);
for (List<Item> paretoLayer: store. getParetoSetClone ()) {
packer. pack (map, paretoLayer, table. get (algorythmsBox. getSelectedItem ()));
}
refreshTree (map); resume. setAlgNameReport ( (String) ResultViewer. this. algorythmsBox. getSelectedItem ());
resume. setEffectivityReport (map);
resume. setRestReport (store);
resume. setPackedReport (map);
resumeLoggerPane. addString (resume. getAlgNameReport ());
resumeLoggerPane. addString (resume. getEffectivityReport ());
resumeLoggerPane. addString (resume. getRestReport ());
resumeLoggerPane. addString (resume. getPackedReport ());
}
}
}
});
clearConsoleButton = new JButton ("Очистить");
clearConsoleButton. addActionListener (new ActionListener () {
@Override
public void actionPerformed (ActionEvent arg0) {
ResultViewer. this. resumeLoggerPane. clearConsole ();
}
});
viewer = new JPanel (new GridBagLayout ());
tree = new JTree (top);
tree. setCellRenderer (new ResultTreeCellRenderer ());
treePanel = new JPanel (new GridBagLayout ());
treePanel. add (new JScrollPane (tree), new GridBagConstraints (0, 0, 1, 1, 1, 1, GridBagConstraints. NORTHWEST, GridBagConstraints. BOTH, new Insets (0, 0, 0, 0), 0, 0));
cBoxPanel = new JPanel (new GridBagLayout ());
splitPane = new JSplitPane (JSplitPane. HORIZONTAL_SPLIT, treePanel, cBoxPanel);
splitPane. setOneTouchExpandable (true);
splitPane. setDividerLocation (350);
cBoxPanel. add (new JScrollPane (resumeLoggerPane), new GridBagConstraints (0, 0, 2, 1, 1, 1, GridBagConstraints. NORTHEAST, GridBagConstraints. BOTH, new Insets (0, 0, 0, 0), 0, 0));
cBoxPanel. add (algorythmsBox, new GridBagConstraints (0, 1, 1, 1, 0, 0, GridBagConstraints. NORTHEAST, GridBagConstraints. NONE, new Insets (0, 0, 0, 0), 0, 0));
cBoxPanel. add (packButton, new GridBagConstraints (1, 1, 1, 1, 0, 0, GridBagConstraints. NORTHWEST, GridBagConstraints. NONE, new Insets (0, 0, 0, 0), 0, 0));
cBoxPanel. add (clearConsoleButton, new GridBagConstraints (1, 1, 1, 1, 0, 0, GridBagConstraints. NORTHEAST, GridBagConstraints. NONE, new Insets (0, 0, 0, 0), 0, 0));
viewer. add (splitPane, new GridBagConstraints (0, 0, 1, 1, 1, 1, GridBagConstraints. NORTHWEST, GridBagConstraints. BOTH, new Insets (5, 5, 5,5), 0, 0));
}
public void refreshTree (SortedMap<Container, List<Item>> map) {
DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Упакованные объекты", true);
createTree (root, map);
}
private void createTree (DefaultMutableTreeNode root, SortedMap<Container, List<Item>> map) {
( (DefaultMutableTreeNode) ( (DefaultTreeModel) tree. getModel ()). getRoot ()). removeAllChildren ();
( (DefaultTreeModel) tree. getModel ()). setRoot (root);
DefaultMutableTreeNode container = null;
DefaultMutableTreeNode item = null;
DefaultMutableTreeNode containerField = null;
DefaultMutableTreeNode itemField = null;
Set<Container> containers = map. keySet ();
for (Container c: containers) {
container = new DefaultMutableTreeNode (c, true);
List<Item> items = map. get (c);
containerField = new DefaultMutableTreeNode ("ID: " + c. getId (), false);
container. add (containerField);
containerField = new DefaultMutableTreeNode ("Объём: " + c. getVolume (), false);
container. add (containerField);
containerField = new DefaultMutableTreeNode ("Грузоподъёмность: " + c. getCargo (), false);
container. add (containerField);
for (Item i: items) {
item = new DefaultMutableTreeNode (i, true);
itemField = new DefaultMutableTreeNode ("ID: " + i. getId (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Объём: " + i. getVolume (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Вес: " + i. getWeight (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Кр.1: " + i. getRate1 (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Кр.2: " + i. getRate2 (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Кр.3: " + i. getRate3 (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Кр.4: " + i. getRate4 (), false);
item. add (itemField);
itemField = new DefaultMutableTreeNode ("Кр.5: " + i. getRate5 (), false);
item. add (itemField);
if (i. hasPair ()) {
itemField = new DefaultMutableTreeNode ("ID парного объекта: " + i. getPair (). getId ());
item. add (itemField);
}
container. add (item);
}
root. add (container);
}
tree. expandPath (new TreePath ( ( (DefaultMutableTreeNode) ( (DefaultMutableTreeNode) root. getChildAt (0)). getChildAt (3)). getPath ()));
}
/**
* @return the viewer
*/
public JPanel getViewer () {
return viewer;
}
}
Пакет launcher.
LayouterLauncher. java
package launcher;
import gui. GUI;
import util. ContainerTemplate;
import util. IntegerDiapason;
import util. ItemTemplate;
import core. Boss;
import core. Packer;
import core. Store;
public class LayouterLauncher {
/**
* @param args
*/
public static void main (String [] args) {
// Задаём ограничения на предельные значения параметров объектов и контейнеров.
ContainerTemplate ct = new ContainerTemplate (new IntegerDiapason (25, 40), new IntegerDiapason (25, 40));
ItemTemplate it = new ItemTemplate (new IntegerDiapason (1, 20),
new IntegerDiapason (1, 20),
new IntegerDiapason (1,5),
new IntegerDiapason (1,5),
new IntegerDiapason (1,5),
new IntegerDiapason (1,5),
new IntegerDiapason (1,5)
);
// Создаём склад.
Store store = new Store ();
// Создаём ЛПР
Boss boss = new Boss ();
// Создаём упаковщика.
Packer packer = new Packer (store, boss);
new GUI (store, packer, boss, ct, it);
}
}
Размещено на Allbest.ru
Подобные документы
Понятия, связанные с принятием решений в различных условиях. Примеры принятия решений в условиях определенности, риска и неопределенности. Модели и методы принятия решений. Страховой, валютный, кредитный риск. Интуитивное и рациональное решение.
реферат [90,4 K], добавлен 16.01.2011Назначение и краткая характеристика систем поддержки принятия решений. Концепции и принципы теории принятия решений. Получение информации, критерии принятия решений и их шкалы. Схема классификации возможных источников и способов получения информации.
курсовая работа [132,5 K], добавлен 14.02.2011Выбор планшетного ПК. Методы решения задач принятия решений в условиях неопределенности. Разработка математического обеспечения поддержки принятия решений на основе реализации стандартных и модифицированных алгоритмов теории исследования операций.
курсовая работа [5,9 M], добавлен 22.01.2016Оценка и выбор многокритериальных решений в условиях определенности и ранжирование исходного множества альтернатив (без учета выполнения ограничений). Принятие решений в условиях риска и неопределенности. Вычисление минимаксного критерия Севиджа.
курсовая работа [128,2 K], добавлен 22.01.2015Основные методы принятия решений. Применение активизирующих методов принятия решений в компании на примере "Менсей". Методы мозгового штурма, конференции идей, вопросов и ответов. Процесс разработки и принятия управленческих решений и их эффективность.
курсовая работа [2,0 M], добавлен 24.12.2014Понятие и сущность управленческих решений и их классификация. Основные понятия теории принятия решений. Применение методов принятия решений в условиях неопределенности. Выявление и диагностика проблем, возникающих в организации при изменении условий.
курсовая работа [105,4 K], добавлен 01.04.2014Подход к управлению как к науке и искусству. Общие сведения о теории принятия решений. Постулаты теории принятия оптимального решения. Классы утверждений психологической теории решений. Методы психологических исследований процессов принятия решений.
реферат [26,2 K], добавлен 07.12.2010Исследование роли управленческих решений, их классификация. Модели и этапы принятия управленческих решений. Особенности разделения труда в процессе принятия решений. Оценка среды принятия решений и рисков, методы прогнозирования для принятия решений.
курсовая работа [233,1 K], добавлен 15.05.2019Процесс подготовки и принятия управленческого решения. Методы принятия решений, направленных на достижение намеченных целей. Принятие управленческих решений в сложных кризисных условиях. Реализация альтернатив в условиях риска и неопределенности.
курсовая работа [123,6 K], добавлен 30.03.2015Анализ и принятие управленческих решений в условиях определенности, в условиях риска, в условиях неопределенности. Общие модели и методы принятия решений в условиях определенности, неопределенности и риска. Эффективность работы персонала.
реферат [34,0 K], добавлен 15.12.2006