Логистическое планирование доставки товаров

Автор работы: Пользователь скрыл имя, 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

Файлы: 1 файл

RPZ.docx

— 4.52 Мб (Скачать файл)

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

 

 

ПЕРЕЧЕНЬ ССЫЛОК

  1. Википедия [Электронный ресурс] / – Режим доступа: http://ru.wikipedia.org/wiki/ Транспортная логистика.
  2. Миротин, Л.Б. Системный анализ в логистике [Текст] / Л.Б. Миротин,       Ы.Э. Тышбаев. – М.: Экзамен, 2002. – 480 с.
  3. Неруш, Ю.М. Логистика [Текст] / Ю.М. Неруш. – М.: ЮНИТИ, 2006. – 520 с.
  4. T.В. Алесинская Общие вопросы логистического управления [Текст]: учеб. пособие / Т.В. Алесинская. – Т.: ТРТУ, 2005. – 150 с.
  5. Семененко, А.И. Логистика. Основы теории [Текст] / А.И. Семененко,         В.И. Сергеев. – СПб.: Союз, 2001. – 544 с.
  6. Стаханов В.Н. Теоретические основы логистики [Текст] / В.Н. Стаханов,      В.Б. Украинцев. – Ростов н/Д: Феникс, 2001. – 360 с.
  7. Vehicle Routing Problems [Электронный ресурс] / – Режим доступа: (http://www.idsia.ch/~monaldo/ЗМТ.html).
  8. Кристофидес, Н. Теория графов. Алгоритмический подход [Текст] /              Н. Кристофидес. – М.: Мир, 1978. – 470 c.
  9. Емельянов В.В. Теория и практика эволюционного моделирования [Текст] / В.В. Емельянов, В.М. Курейчик, В.В. Курейчик. – М.: Физматлит, 2003. –595 c.
  10. Генетические алгоритмы [Электронный ресурс] / – Режим доступа: http://qai.narod.ru/GA/index.htm.
  11. Генетические алгоритмы [Электронный ресурс] / – Режим доступа: http://www.citforum.ru.
  12. Эксперименты с генетическим алгоритмом [Электронный ресурс] / – Режим доступа: http://neo.lcc.uma.es/radiaeb/WebЗМТ//main.html.
  13. Bean J.C. Genetic algorithms and random keys for sequencing and optimization // ORSA Journal on Computing. – 1994. – № 6. – P. 154–160.
  14. Blanton J.L. Multiple vehicle routing with time and capacity constraints using genetic algorithms. In S. Forrest, editor / J.L. Blanton, R.L. Wainwright // Proceedings of the Fifth International Conference on Genetic Algorithms. –Morgan Kaufmann. – San Mateo, CA, 1993. – P. 452– 459.
  15. Gendreau M. Metaheuristics for the vehicle routing problem / M. Gendreau, G. Laporte, J.- Y. Potvin // Technical Report CRT-963, Centre de Recherche sur les Transports. – Universit de Montral, jan 1994.
  16. Goldberg D.E. Genetic Algorithms in Search, Optimization and Machine Learning. Addison-Wesley, Reading, MA, 1989.
  17. Goldberg D.E. Alleles, loci and the traveling salesman problem. In J.J.Grefenstette, editor, D.E. Goldberg and R. Lingle // Proceedings of the First International Conference on Genetic Algorithms. – Lawrence Erlbaum, Hillsdale, NJ, 1985. – P. 154–159.
  18. Holland J. H. Adaptation in Natural and Artificial Systems / J.H. Holland. –The University of Michigan Press, Ann Arbor, MI, 1975.
  19. Jeon G. A vehicle routing problem solved by using a hybrid genetic algorithm / G. Jeon, H. Leep, J. Shim // Computers Industrial Engineering, Volume: 53, Issue: 4 (2007).
  20. Laporte G. Classical Heuristics for the Vehicle Routing Problem / G. Laporte, F. Semet // Les Cahiers du GERAD, G98-54, Group for Research in Decision Analysis. – Montreal, Canada, 1998.
  21. Oliver I.M. A study of permutation crossover operators on the traveling salesman problem. In J.J. Grefenstette, editor / I.M. Oliver, D.J. Smith, J.R.C Holland // Proceedings of the Second International Conference on Genetic Algorithms. – Lawrence Erlbaum, Hillsdale, NJ, 1987. – P. 224–230.
  22. Potvin J.-Y. Genetic algorithms for the traveling salesman problem // Annals of Operations Research. – 1996. – № 63. – P. 339–370.
  23. Potvin J.Y. A genetic algorithm for vehicle routing with backhauling / J.Y. Potvin, C. Duhamel, F. Guertin // Applied Intelligence. – 1996. – № 6. –   P. 345–355.
  24. Potvin J.Y. The vehicle routing problem with time windows / J.Y. Potvin and S. Bengio // INFORMS Journal on Computing. – Part II: Genetic search. – 1996. – № 8. – P. 165–172.
  25. Schmitt L.J. An empirical computational study of genetic algorithms to solve order based problems: An emphasis on TSP and VRPTC : Ph.D. Dissertation

/ L.J. Schmitt; Fogelman College of Business and Economics. – University of

Memphis, 1994.

  1. Schmitt L.J. An evaluation of a genetic algorithmic approach to the vehicle

routing problem // Working paper, Department of Information Technology

Management. – Christian Brothers University, Memphis, 1995.

  1. Thangiah S.R. Vehicle routing with time windows using genetic algorithms // Technical report SRU- CpSc-TR-93-23. – Slippery Rock University, Slippery Rock, PA, 1993.
  2. Thangiah S.R. An adaptive clustering method using a geometric shape for vehicle routing problems with time windows. In L.J. Eshelman, editor // Proceedings of the Sixth International Conference on Genetic Algorithm. –Morgan Kaufmann, San Mateo, CA, 1995. – P. 536–543.
  3. Thangiah S.R. Algorithms for the vehicle routing problem with time deadlines/ S.R. Thangiah, I.H. Osman, R. Vinayagamoorthy, T. Sun // American Journal of Mathematical and Management Sciences. – 1993. – № 13. – P. 323–355.
  4. Whitley D. Scheduling problems and traveling salesmen: The genetic edge recombination operator. In J.D. Schaffer, editor / D. Whitley, T. Starkweather,

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.UnsupportedEncodingException;

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.esri.shapefile.ShapeFileReader;

import org.nocrala.tools.gis.data.esri.shapefile.exception.InvalidShapeFileException;

import org.nocrala.tools.gis.data.esri.shapefile.header.ShapeFileHeader;

import org.nocrala.tools.gis.data.esri.shapefile.shape.AbstractShape;

import org.nocrala.tools.gis.data.esri.shapefile.shape.PointData;

import org.nocrala.tools.gis.data.esri.shapefile.shape.shapes.MultiPointZShape;

import org.nocrala.tools.gis.data.esri.shapefile.shape.shapes.PointShape;

import org.nocrala.tools.gis.data.esri.shapefile.shape.shapes.PolygonShape;

 

import com.google.common.base.Function;

import com.google.common.base.Joiner;

import com.google.common.collect.Iterables;

import com.google.common.collect.Maps;

 

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,500);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    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&useUnicode=true&characterEncoding=utf8";

            String user = "root";

            String password = "kaffedra302";

            Class.forName("com.mysql.jdbc.Driver");

            Connection conn = DriverManager.getConnection(dbUrl, user, password);

System.out.println("Connected.");

Statement st = conn.createStatement();

st.executeUpdate("TRUNCATE base");

System.out.println("Successfully truncated test_table");

   conn.close();

} catch (Exception ex) {

            ex.printStackTrace();

        }

try {             //Изменение Депо

            String dbUrl = "jdbc:mysql://localhost/gds" +

                    "?autoReconnect=true&useUnicode=true&characterEncoding=utf8";

            String user = "root";

            String password = "kaffedra302";

            Class.forName("com.mysql.jdbc.Driver");

            Connection conn = DriverManager.getConnection(dbUrl, user, password);

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&useUnicode=true&characterEncoding=utf8";

            String user = "root";

            String password = "kaffedra302";

            Class.forName("com.mysql.jdbc.Driver");

            Connection conn = DriverManager.getConnection(dbUrl, user, password);

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&useUnicode=true&characterEncoding=utf8";

              String user = "root";

              String password = "kaffedra302";

              Class.forName("com.mysql.jdbc.Driver");

              Connection conn = DriverManager.getConnection(dbUrl, user, password);

     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);

     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]+" "+id[1]+" "+id[2] +numb);

     

     

     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&useUnicode=true&characterEncoding=utf8";

              String user = "root";

              String password = "kaffedra302";

              Class.forName("com.mysql.jdbc.Driver");

              Connection conn = DriverManager.getConnection(dbUrl, user, password);

     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);

     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);

Информация о работе Логистическое планирование доставки товаров