Автор работы: Пользователь скрыл имя, 08 Декабря 2013 в 20:44, дипломная работа
Цель и задачи исследования. Целью дипломной работы бакалавра является повышение эффективности поиска оптимальных маршрутов и решение задачи маршрутизации транспорта с ограничением по грузоподъемности.
Для достижения поставленной цели были решены следующие задачи:
провести анализ методов и подходов к решению задач маршрутизации транспорта;
разработать или модифицировать существующий алгоритм решения задачи маршрутизации транспорта с ограничение по грузоподъемности;
разработать программный продукт, способный находить и оптимизировать маршруты доставки для 100 и более клиентов;
ВВЕДЕНИЕ3
АНАЛИЗ СУЩЕСТВУЮЩИХ ПРОБЛЕМ ТРАНСПОРТНОЙ ЛОГИСТИКИ5
1.1 Понятие транспорта и транспортной логистики 5
1.2 Транспортная экспедиция8
1.3 Основные принципы маршрутизации9
1.4 Задачи маршрутизации транспорта11
1.5 Разновидности ЗМТ13
1.6 Существующий инструментарий для решения ЗМТ18
1.7 Результаты анализа и постановка задачи20
МАТЕМАТИЧЕСКАЯ МОДЕЛЬ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ МАРШРУТИЗАЦИИ ТРАСПОРТА В УСЛОВИЯХ ГОРОДСКОЙ ДОРОЖНОЙ СЕТИ21
2.1 Классификация алгоритмов для решения ЗМТ21
2.2 Генетический алгоритм23
2.2.1 Основной вид генетического алгоритма23
2.2.2 Применение генетического алгоритма для задач упорядочивания24
2.2.3 Применение алгоритма для решения ЗМТ25
2.3 Задача построение планов доставки для розничной клиентской сети26
МЕТОД РЕШЕНИЯ ЗАДАЧИ МАРШРУТИЗАЦИИ ТРАНСПОРТА В УСЛОВИЯХ ГОРОДСКОЙ ДОРОЖНОЙ СЕТИ31
3.1 Упрощение исходного графа городской дорожній сети31
3.2 Архитектура генетического алгоритма32
3.3 Сравнительные результаты и эффективность похода35
ВЫБОР ИНСТРУМЕНТАЛЬНЫХ СРЕДСТВ И ПОСТРОЕНИЕ БД36
4.1 Обоснование выбора используемого инструментального средства......36
4.1.1 Java36
4.1.2 MySql37
4.1.3 GoogleMaps API37
4.2 Создание базы данных38
5 ТЕСТОВЫЙ ЗАПУСК ПРИЛОЖЕНИЯ40
5.1 Руководство пользователя40
6 ЭКОНОМИЧЕСКАЯ ЧАСТЬ42
6.1 Описание изделия42
6.2 Расчет себестоимости и цены программного продукта42
6.3 Перечни работ для создания программного продукта42
ВЫВОДЫ ПО РАЗДЕЛУ45
7 ОХРАНА ТРУДА. 47
7.1 Выявление и анализ опасных и вредных производственных факторов, действующих в рабочей зоне проектируемого объекта47
7.2 Разработка мероприятий по предотвращению или ослаблению возможного воздействия опасных и вредных производственных факторов на работающих48
7.3 Расчет системы жизнеобеспечения48
ВЫВОДЫ ПО РАЗДЕЛУ51
Так или иначе, программная
реализация генетического алгоритма
требует уточнения задающих параметров.
В свою очередь, достаточно тяжело,
точно указывать коэффициенты загруженности
дорог и суточные интервалы. Я
считаю, что решение этих проблем
обеспечит выявления более
/ L.J. Schmitt; Fogelman College of Business and Economics. – University of
Memphis, 1994.
routing problem // Working paper, Department of Information Technology
Management. – Christian Brothers University, Memphis, 1995.
D. Fuquay // Proceedings of the Third International Conference on Genetic Algorithms. – Morgan Kaufmann, San Mateo, CA, 1989. – P. 133-140.
ПРИЛОЖЕНИЕ А
ПРИЛОЖЕНИЕ Б
package TimeSearch;
import java.awt.*;
import java.awt.event.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Map.Entry;
import javax.swing.*;
import org.json.JSONException;
import org.json.JSONObject;
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import org.nocrala.tools.gis.data.
import com.google.common.base.
import com.google.common.base.Joiner;
import com.google.common.collect.
import com.google.common.collect.
public class Inter extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JButton button = new JButton("Добавить депо");
private JButton button1 = new JButton("Добавить клиента");
private JButton button2 = new JButton("Проложить маршрут");
private JTextField input = new JTextField();
private JTextField input1 = new JTextField();
private JTextField input2 = new JTextField();
private JTextField input3 = new JTextField();
private JTextField input4 = new JTextField();
private JTextField input5 = new JTextField();
private JTextField input6 = new JTextField();
private JLabel label = new JLabel("Адрес");
private JLabel label1 = new JLabel("Машин");
private JLabel label2 = new JLabel("Грузоподъемность");
private JLabel label3 = new JLabel("Адрес клиента");
private JLabel label4 = new JLabel("Заказ А");
private JLabel label5 = new JLabel("Заказ Б");
DefaultListModel listModel = new DefaultListModel();
JList list = new JList(listModel);
public Inter() {
super("Simple Example");
this.setBounds(100,100,700,
this.setDefaultCloseOperation(
Container container = this.getContentPane();
container.setLayout(null);
container.add(label);
container.add(label1);
container.add(label2);
container.add(label3);
container.add(label4);
container.add(label5);
container.add(input);
container.add(input1);
container.add(input2);
container.add(input3);
container.add(input4);
container.add(input5);
container.add(input6);
button.addActionListener(new ButtonEventListener(){ //Добавление депо
@Override
public void actionPerformed(ActionEvent e) {
String s = input1.getText();
String s1 = input2.getText();
int cars = Integer.parseInt(s);
int cap = Integer.parseInt(s1);
try { //Очистка депо
String dbUrl = "jdbc:mysql://localhost/gds" +
"?autoReconnect=true&
String user = "root";
String password = "kaffedra302";
Class.forName("com.mysql.jdbc.
Connection conn = DriverManager.getConnection(
System.out.println("Connected.
Statement st = conn.createStatement();
st.executeUpdate("TRUNCATE base");
System.out.println("
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try { //Изменение Депо
String dbUrl = "jdbc:mysql://localhost/gds" +
"?autoReconnect=true&
String user = "root";
String password = "kaffedra302";
Class.forName("com.mysql.jdbc.
Connection conn = DriverManager.getConnection(
System.out.println("Connected.
String sql1 = "INSERT INTO gds.Base(base_id, adres, cars,capacity) VALUES (?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql1);
stmt.setInt(1, 1);
stmt.setString(2, input.getText());
stmt.setInt(3, cars);
stmt.setInt(4, cap);
stmt.executeUpdate();
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}});
container.add(button);
button1.addActionListener(new ButtonEventListener(){ //Добавление клиента
@Override
public void actionPerformed(ActionEvent e) {
String s = input4.getText();
String s1 = input5.getText();
int orderV = Integer.parseInt(s);
int orderR = Integer.parseInt(s1);
try {
String dbUrl = "jdbc:mysql://localhost/gds" +
"?autoReconnect=true&
String user = "root";
String password = "kaffedra302";
Class.forName("com.mysql.jdbc.
Connection conn = DriverManager.getConnection(
System.out.println("Connected.
Statement st = conn.createStatement();
String query = "select * from Clients";
ResultSet rs = st.executeQuery(query);
int t=0;
int numb=tLenght(rs,t)+1;
String sql = "INSERT INTO gds.Clients(client_id, client_adres, product_v, product_r, base_id) VALUES (?,?,?,?,?)";
PreparedStatement stat = conn.prepareStatement(sql);
stat.setInt(1, numb);
stat.setString(2, input3.getText());
stat.setInt(3, orderV);
stat.setInt(4, orderR);
stat.setInt(5, 1);
stat.executeUpdate();
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}});
container.add(button1);
button2.addActionListener(new ButtonEventListener(){ //ПРОЛОЖИТЬ МАРШРУТ
@Override
public void actionPerformed(ActionEvent e) {
try {
String dbUrl = "jdbc:mysql://localhost/gds" +
"?autoReconnect=true&
String user = "root";
String password = "kaffedra302";
Class.forName("com.mysql.jdbc.
Connection conn = DriverManager.getConnection(
System.out.println("
Statement st = conn.createStatement();
String query = "select * from Clients";
ResultSet rs = st.executeQuery(query);
int t=0;
int numb=tLenght(rs,t);
String query1 = "select client_id, client_adres from Clients";
ResultSet rs1= st.executeQuery(query1);
int[]id=new int [numb];
String[]adr=new String [numb];
int p = 0;
while (rs1.next()){
id[p] = rs1.getInt("client_id");
adr[p] = rs1.getString("client_adres");
p++;
}
System.out.println(id[0]+
for (int i=0; i<numb;i++){
int k = i+1;
for (int j=0;j<numb;j++){
if (k!=id[j]){
String query2 = "select * from routs";
ResultSet rs2 = st.executeQuery(query2);
int lenght=tLenght(rs2,t)+1;
int Time = Time(adr[i], adr[j])/60;
double dist = Dist(adr[i], adr[j]);
String sql1 = "INSERT INTO gds.routs VALUES (?,?,?,?,?,?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql1);
stmt.setInt(1, lenght);
stmt.setString(2, adr[i]);
stmt.setString(3, adr[j]);
stmt.setDouble(4, dist);
stmt.setDouble(5, Time);
stmt.setInt(6, 1);
stmt.setDouble(7, 0.1);
stmt.setInt(8,id[i]);
stmt.setInt(9,id[j]);
stmt.executeUpdate();
}
}
};
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
try {
String dbUrl = "jdbc:mysql://localhost/gds" +
"?autoReconnect=true&
String user = "root";
String password = "kaffedra302";
Class.forName("com.mysql.jdbc.
Connection conn = DriverManager.getConnection(
System.out.println("
Statement st = conn.createStatement();
String query = "select * from Clients";
ResultSet rs = st.executeQuery(query);
int t=0;
int numb=tLenght(rs,t);
int bid=numb+1;
String query3 = "select adres from base";
ResultSet rs3= st.executeQuery(query3);
String[] base=new String[1];
while (rs3.next()){
base[0] = rs3.getString("adres");}
String query1 = "select client_id, client_adres from Clients";
ResultSet rs1= st.executeQuery(query1);
int[]id=new int [numb];
String[]adr=new String [numb];
int p = 0;
while (rs1.next()){
id[p] = rs1.getInt("client_id");
adr[p] = rs1.getString("client_adres");
p++;
}
for (int j=0;j<numb;j++){
String query4 = "select * from routs";
ResultSet rs4 = st.executeQuery(query4);
int lenght=tLenght(rs4,t)+1;
int Time = Time(base[0], adr[j])/60;
double dist = Dist(base[0], adr[j]);
String sql1 = "INSERT INTO gds.routs VALUES (?,?,?,?,?,?,?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql1);
stmt.setInt(1, lenght);
stmt.setString(2, base[0]);
stmt.setString(3, adr[j]);
stmt.setDouble(4, dist);
stmt.setDouble(5, Time);
stmt.setInt(6, 1);
stmt.setDouble(7, 0.1);
stmt.setInt(8,bid);
stmt.setInt(9,id[j]);
stmt.executeUpdate();
};
conn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}});
container.add(button2);
Insets insets = container.getInsets();
container.add(list);
//РАСПОЛОЖЕНИЕ ЭЛЕМЕНТОВ НА ФОРМЕ
Dimension size = input.getPreferredSize();
input.setBounds(130 + insets.left, 5 + insets.top,
size.width +150, size.height);
size = input1.getPreferredSize();
input1.setBounds(130 + insets.left, 35 + insets.top,
size.width + 150, size.height);
size = input2.getPreferredSize();
input2.setBounds(130 + insets.left, 65 + insets.top,
size.width + 150, size.height);
size = input3.getPreferredSize();
input3.setBounds(530 + insets.left, 5 + insets.top,
size.width +150, size.height);
size = input4.getPreferredSize();
input4.setBounds(530 + insets.left, 35 + insets.top,
size.width + 150, size.height);
size = input5.getPreferredSize();
input5.setBounds(530 + insets.left, 65 + insets.top,
size.width + 150, size.height);
input6.setBounds(260 + insets.left, 260 + insets.top,
size.width + 350, size.height);
size = label.getPreferredSize();
label.setBounds(85 + insets.left, 5 + insets.top,
size.width, size.height);
size = label1.getPreferredSize();
label1.setBounds(85 + insets.left, 35 + insets.top,
size.width, size.height);
size = label2.getPreferredSize();
label2.setBounds(10 + insets.left, 65 + insets.top,
size.width + 80, size.height);
Информация о работе Логистическое планирование доставки товаров