<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article xml:lang="EN" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="methods-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Bohr. Omrp.</journal-id>
<journal-title>BOHR International Journal of Operations Management Research and Practices</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Bohr. Omrp.</abbrev-journal-title>
<issn pub-type="epub">2583-6420</issn>
<publisher>
<publisher-name>BOHR</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.54646/bijomrp.2023.12</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Methods</subject>
</subj-group>
</article-categories>
<title-group>
<article-title>Application of genetic algorithm, a mega-heuristic approach, to solve a real-size vehicle routing problem: a case study</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Nhu</surname> <given-names>Phong Nguyen</given-names></name>
<xref ref-type="corresp" rid="c001"><sup>&#x002A;</sup></xref>
</contrib>
<contrib contrib-type="author">
<name><surname>Thi</surname> <given-names>Thao Do</given-names></name>
</contrib>
</contrib-group>
<aff><institution>HCMC University of Technology</institution>, <addr-line>Ho Chi Minh</addr-line>, <country>Vietnam</country></aff>
<author-notes>
<corresp id="c001">&#x002A;Correspondence: Phong Nguyen Nhu, <email>nnphong@hcmut.edu.vn</email></corresp>
</author-notes>
<pub-date pub-type="epub">
<day>27</day>
<month>07</month>
<year>2023</year>
</pub-date>
<volume>2</volume>
<issue>1</issue>
<fpage>10</fpage>
<lpage>16</lpage>
<history>
<date date-type="received">
<day>17</day>
<month>07</month>
<year>2023</year>
</date>
<date date-type="accepted">
<day>19</day>
<month>07</month>
<year>2023</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x00A9; 2023 Nhu and Do Thi.</copyright-statement>
<copyright-year>2023</copyright-year>
<copyright-holder>Nhu and Do Thi</copyright-holder>
<license xlink:href="https://creativecommons.org/licenses/by-nc-nd/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) and the copyright owner(s) are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract>
<p>Most of the 3PL companies that provide transportation services are handling thousands of orders per day. Vehicle routing problems (VRPs) help plan the distribution of goods with the optimum fleet of vehicles and delivery routes and play an important role in helping businesses reduce transportation costs while ensuring service level. VRPs are NP-hard combinatorial optimization problems. It is quite difficult to achieve an optimal solution for real-size problems with a mathematical modeling approach because of its NP-hard structure. Genetic algorithm (GA) plays a major role in searching for near-optimal solutions for NP-hard optimization problems. This article develops the GA model for VRPs. The result shows that the delivery cost is reduced by 17.88%, while the service level increase from 88.7 to 100%. It indicates that the model can be a good technique for VRPs.</p>
</abstract>
<kwd-group>
<kwd>distribution planning</kwd>
<kwd>mathematical modeling</kwd>
<kwd>vehicle routing problems</kwd>
<kwd>genetic algorithm</kwd>
</kwd-group>
<counts>
<fig-count count="3"/>
<table-count count="17"/>
<equation-count count="15"/>
<ref-count count="7"/>
<page-count count="7"/>
<word-count count="4272"/>
</counts>
</article-meta>
</front>
<body>
<sec id="S1" sec-type="intro">
<title>1. Introduction</title>
<p>In today&#x2019;s fiercely competitive business environment, companies need to optimize their supply chains. Logistics is one of the key areas in supply chain management. Vehicle routing problem (VRP) is a core problem in logistics that refers to a class of combinatorial optimization in which customers are served by several vehicles. VRP is a problem in which there is a set of vehicles and a set of customers; each customer requires a certain number of goods.</p>
<p>This problem is a type of distribution problem that determines the transportation facilities and their delivery routes with specific objectives and constraints. The problem to be solved is a VRP with an assumption that the trucks start at the real warehouse and end at the virtual warehouse, the travel time between the points is fixed, the unloading time at the points is fixed, the speed of the trucks is the same and fixed, and the factors of failure, accident, and weather are not taken into account.</p>
<p>The objective of the problem is to minimize the transportation cost. The constraints are on the level of customer service and on the capacity of the transportation facilities. The model of the problem is built based on the above assumptions, objectives, and constraints.</p>
<p>A genetic algorithm (GA) is built. Based on the model of the problem, the GA will find a good solution for the problem, and this solution will be compared with the solution of the currently used heuristic model to evaluate the effectiveness of the GA.</p>
</sec>
<sec id="S2">
<title>2. Literature review</title>
<sec id="S2.SS1">
<title>2.1. Vehicle routing problems</title>
<p>Vehicle routing problem is about finding optimal routes for a fixed fleet of vehicles in order that they can meet the demands of a set of given customers by traveling through those paths (<xref ref-type="bibr" rid="B1">1</xref>). Vehicle routing is an important area in the field of supply chain management. Therefore, solving VRP efficiently plays a vital role in the effective implementation of supply chain practices for any organization (<xref ref-type="bibr" rid="B2">2</xref>).</p>
<p>Open VRP (OVRP) is a type of VRP, where routes finish after servicing the last client (<xref ref-type="bibr" rid="B3">3</xref>). The OVRP differs from the classic VRP because either the vehicles are not required to return to the depot or they have to return by revisiting the customers assigned to them in the reverse order (<xref ref-type="bibr" rid="B4">4</xref>).</p>
<p>The capacitated VRP is a problem risen in the fields of transportation, distribution, and logistics in which a fleet of delivery vehicles must service known customer demands for a single commodity from a common depot at minimum cost (<xref ref-type="bibr" rid="B5">5</xref>). In the well-known VRP, a set of identical vehicles, based at a central depot, is to be optimally routed to supply customers with known demands subject to vehicle capacity constraints (<xref ref-type="bibr" rid="B6">6</xref>).</p>
<p>The VRP is a challenging combinatorial optimization problem (<xref ref-type="bibr" rid="B7">7</xref>). Complexity in solving the problem increases exponentially as the problem size increases. GA is a widely applied search method to complex problems such as VRPs (<xref ref-type="bibr" rid="B2">2</xref>).</p>
</sec>
<sec id="S2.SS2">
<title>2.2. Genetic algorithm</title>
<p>Genetic algorithm, first introduced by Holland in 1975, is an artificial intelligence search method that uses the process of evolution and natural selection of individuals called chromosomes. It is an efficient tool for solving optimization problems. In order to apply GA to a problem, generally the solution space of the problem is represented by a population of chromosomes where each chromosome is a possible solution to the problem. Chromosomes are represented by strings. A method of coding is the selection of a string format for the chromosomes. A fitness value is associated with each chromosome. The fitness function is a measure of the extent to which the objective of the problem is achieved. The fitness function is derived from the objective function of the problem. A certain number of chromosomes are chosen to form the initial generation. The chromosomes of the next generation are generated by applying genetic operators, including selection, crossover, mutation, and replacement, to the chromosomes of the existing generation.</p>
<p>Starting from an initial population, the algorithm produces a new population of individuals, which are presumably more fit than their ancestors. The process is repeated until a pre-specified termination rule becomes true. At each generation, every new chromosome corresponds to a solution.</p>
</sec>
</sec>
<sec id="S3">
<title>3. The vehicle routing problem</title>
<p>The problem to be solved is an OVRP, where vehicles after delivery to customers do not need to return to the starting point. The distribution system consists of a warehouse and a fleet of vehicles V<sub><italic>v</italic></sub>, v = 1&#x00F7;V. Each vehicle V<sub><italic>v</italic></sub> has max load Q<sub><italic>v</italic></sub>, limited delivery time T<sub><italic>v</italic></sub>, and operating cost f<sub><italic>v</italic></sub>. The system distributes for N customers, and each customer is 1 point on the distribution network. The distribution network consists of N + 1 nodes, with node 0 being the warehouse, node i, i = 1&#x00F7;N corresponding to the ith customer. Customers at node i have demand di, unloading time Si, i = 1&#x00F7;N. On a distributed network, the travel time from node i to node j is T<sub><italic>ij</italic></sub>, i = 0&#x00F7;N&#x2212;1, j = 1&#x00F7;N.</p>
<p>The objective of the problem is to minimize the total delivery cost. The constraints of the problem include the following: Each route starts at the warehouse and ends at a customer point. The number of vehicles starting at the real warehouse and ending at the virtual warehouse is equal and does not exceed the limited number of vehicles. The number of cars arriving and leaving at each node is equal. Each customer is only served once by one vehicle. The total delivery time does not exceed the time limit. The total demand of the customers in each route does not exceed the vehicle tonnage.</p>
<p>The model is set up with the decision variable y<sub><italic>ij</italic></sub><italic><sup>v</sup></italic>, i = 0&#x00F7;N&#x2212;1, j = 1&#x00F7;N, v = 1&#x00F7;V. If vehicle v moves from node i to node j, then y<sub><italic>ij</italic></sub><italic><sup>v</sup></italic> is 1; otherwise, y<sub><italic>ij</italic></sub><italic><sup>v</sup></italic> is 0. The model is as follows:</p>
<disp-formula id="S3.Ex1">
<mml:math id="M1">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:mi>M</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mpadded width="+5pt">
<mml:mi>n</mml:mi>
</mml:mpadded>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>Z</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mpadded width="+3.3pt">
<mml:mi>Z</mml:mi>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>v</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>V</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>j</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:msub>
<mml:mi>f</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex2">
<mml:math id="M2">
<mml:mrow>
<mml:mi>S</mml:mi>
<mml:mi>t</mml:mi>
<mml:mo>.</mml:mo>
<mml:mo>:</mml:mo>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>v</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>V</mml:mi>
</mml:munderover>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>j</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mpadded width="+3.3pt">
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mn>0</mml:mn>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mpadded>
<mml:mo rspace="10.8pt">=</mml:mo>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>v</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>V</mml:mi>
</mml:munderover>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mpadded width="+3.3pt">
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2264;</mml:mo>
<mml:mi>V</mml:mi>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex3">
<mml:math id="M3">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>v</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>V</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mpadded width="+3.3pt">
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mpadded>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>\</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex4">
<mml:math id="M4">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mpadded width="+3.3pt">
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>e</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mpadded>
</mml:mrow>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>j</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>e</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mi>N</mml:mi>
<mml:mo>\</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>e</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>i</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>e</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex5">
<mml:math id="M5">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+1.3pt">
<mml:mi>j</mml:mi>
</mml:mpadded>
<mml:mo rspace="2.8pt">=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>d</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
<mml:mo>&#x2062;</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo rspace="5.8pt" stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">&#x2264;</mml:mo>
<mml:msub>
<mml:mi>Q</mml:mi>
<mml:mi>v</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex6">
<mml:math id="M6">
<mml:mrow>
<mml:mrow>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:munderover>
<mml:mo largeop="true" movablelimits="false" symmetric="true">&#x2211;</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>j</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>0</mml:mn>
</mml:mrow>
<mml:mi>N</mml:mi>
</mml:munderover>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mrow>
<mml:msub>
<mml:mi>t</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:msub>
<mml:mo>+</mml:mo>
<mml:msub>
<mml:mi>s</mml:mi>
<mml:mi>j</mml:mi>
</mml:msub>
</mml:mrow>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
<mml:mo>&#x2062;</mml:mo>
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mrow>
<mml:mo rspace="5.8pt" stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="5.8pt">&#x2264;</mml:mo>
<mml:mi>T</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<disp-formula id="S3.Ex7">
<mml:math id="M7">
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+5pt">
<mml:msubsup>
<mml:mi>y</mml:mi>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2062;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
<mml:mi>v</mml:mi>
</mml:msubsup>
</mml:mpadded>
<mml:mo>&#x2208;</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo>,</mml:mo>
<mml:mn>&#x2005;1</mml:mn>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>v</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>V</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>j</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mrow>
<mml:mi>i</mml:mi>
<mml:mo>&#x2208;</mml:mo>
<mml:mi>N</mml:mi>
</mml:mrow>
<mml:mo rspace="7.5pt">,</mml:mo>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>i</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">&#x2260;</mml:mo>
<mml:mi>j</mml:mi>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
</sec>
<sec id="S4">
<title>4. The GA model for the pilot VRP</title>
<p>The pilot problem is a VRP problem with six trucks and eight customers (V = 6, N = 8). The parameters of fleet, customers, and travel time between nodes are as in <xref ref-type="table" rid="T1">Tables 1</xref>&#x2013;<xref ref-type="table" rid="T3">3</xref>. The pilot problem model is set up according to the above parameters. The GA model is used to solve the problem by the following procedure:</p>
<table-wrap position="float" id="T1">
<label>TABLE 1</label>
<caption><p>Loads, time limits, and fleet costs.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">v</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">5</td>
<td valign="top" align="center">6</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Q<sub><italic>v</italic></sub> (kg)</td>
<td valign="top" align="center">300</td>
<td valign="top" align="center">300</td>
<td valign="top" align="center">300</td>
<td valign="top" align="center">400</td>
<td valign="top" align="center">400</td>
<td valign="top" align="center">500</td>
</tr>
<tr>
<td valign="top" align="left">f<sub><italic>v</italic></sub> (M)</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">5</td>
</tr>
<tr>
<td valign="top" align="left">T<sub><italic>v</italic></sub> (h)</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T2">
<label>TABLE 2</label>
<caption><p>Demand, unloading time at delivery points.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">i</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">5</td>
<td valign="top" align="center">6</td>
<td valign="top" align="center">7</td>
<td valign="top" align="center">8</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">d<sub><italic>i</italic></sub> (kg)</td>
<td valign="top" align="center">50</td>
<td valign="top" align="center">300</td>
<td valign="top" align="center">200</td>
<td valign="top" align="center">150</td>
<td valign="top" align="center">100</td>
<td valign="top" align="center">150</td>
<td valign="top" align="center">50</td>
<td valign="top" align="center">100</td>
</tr>
<tr>
<td valign="top" align="left">S<sub><italic>i</italic></sub> (h)</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T3">
<label>TABLE 3</label>
<caption><p>Travel time T<sub>ij</sub> (h) between nodes.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">i\j</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">5</td>
<td valign="top" align="center">6</td>
<td valign="top" align="center">7</td>
<td valign="top" align="center">8</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">0</td>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.068</td>
<td valign="top" align="center">0.137</td>
<td valign="top" align="center">0.133</td>
<td valign="top" align="center">0.143</td>
<td valign="top" align="center">0.345</td>
<td valign="top" align="center">0.203</td>
<td valign="top" align="center">0.261</td>
<td valign="top" align="center">0.202</td>
</tr>
<tr>
<td valign="top" align="left">1</td>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.08</td>
<td valign="top" align="center">0.065</td>
<td valign="top" align="center">0.076</td>
<td valign="top" align="center">0.345</td>
<td valign="top" align="center">0.228</td>
<td valign="top" align="center">0.265</td>
<td valign="top" align="center">0.236</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.062</td>
<td valign="top" align="center">0.049</td>
<td valign="top" align="center">0.301</td>
<td valign="top" align="center">0.221</td>
<td valign="top" align="center">0.231</td>
<td valign="top" align="center">0.238</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.019</td>
<td valign="top" align="center">0.362</td>
<td valign="top" align="center">0.27</td>
<td valign="top" align="center">0.289</td>
<td valign="top" align="center">0.283</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.349</td>
<td valign="top" align="center">0.265</td>
<td valign="top" align="center">0.279</td>
<td valign="top" align="center">0.28</td>
</tr>
<tr>
<td valign="top" align="left">5</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.165</td>
<td valign="top" align="center">0.084</td>
<td valign="top" align="center">0.189</td>
</tr>
<tr>
<td valign="top" align="left">6</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.088</td>
<td valign="top" align="center">0.03</td>
</tr>
<tr>
<td valign="top" align="left">7</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.117</td>
</tr>
<tr>
<td valign="top" align="left">8</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
</tr>
</tbody>
</table></table-wrap>
<list list-type="simple">
<list-item><p>Step 1: Initialize the GA model.</p>
</list-item>
<list-item><p>Step 2: Generate the initial population <bold>P<sup>(0)</sup></bold>. Set k = 0.</p>
</list-item>
<list-item><p>Step 3: Generate elite population <bold>P</bold><sub><bold>E</bold></sub><sup>(<bold>k</bold>)</sup>.</p>
</list-item>
<list-item><p>Step 4: Generate the genetic population P<sub><bold>G</bold></sub><sup>(<bold>k</bold>)</sup>.</p>
</list-item>
<list-item><p>Step 5: Generate the next population <bold>P</bold><sup>(<bold>k+1</bold>)</sup>. Set k = k +1.</p>
</list-item>
<list-item><p>Step 6: Check the termination rule. If no, return to Step 3. If yes, finish the loop.</p>
</list-item>
</list>
<p><bold>Step 1: Initialize the GA model</bold></p>
<p>This step sets up factors of GA models, including the method of coding, the population size, the fitness function, the parameters of GA operators, and the termination rule.</p>
<p><italic><bold>The method of coding:</bold></italic> Each chromosome C is a string of two sub-chromosomes, S1 is corresponding to the customer sequence, and S2 is corresponding to the vehicle sequence:</p>
<disp-formula id="S4.Ex8">
<mml:math id="M8">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi mathvariant="normal">C</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">[</mml:mo>
<mml:mi>S1</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>S2</mml:mi>
<mml:mo stretchy="false">]</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p>Customers are numbered from 1 to 8. Each sub-chromosome S1 is a string of eight genes, G<sub>ci</sub>, i = 1&#x00F7;8, corresponding to eight customers. The sequence of genes in a sub-chromosome represents the sequence of customers being served: S1 = (G<sub>c1</sub>, G<sub>c2</sub>, G<sub>c3</sub>, G<sub>c4</sub>, G<sub>c5</sub>, G<sub>c6</sub>, G<sub>c7</sub>, G<sub>c8</sub>). Vehicles are numbered from 1 to 6. Each sub-chromosome S2 is a string of six genes, G<sub>vj</sub>, j = 1&#x00F7;6, corresponding to six vehicles. The sequence of genes in a sub-chromosome represents the sequence of vehicles being used:</p>
<disp-formula id="S4.Ex9">
<mml:math id="M9">
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>S2</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mprescripts/>
<mml:mi>v1</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mprescripts/>
<mml:mi>v2</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mprescripts/>
<mml:mi>v3</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mprescripts/>
<mml:mi>v4</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo>,</mml:mo>
<mml:mprescripts/>
<mml:mi>v5</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">G</mml:mi>
<mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mprescripts/>
<mml:mi>v6</mml:mi>
<mml:none/>
</mml:mmultiscripts>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<p><italic><bold>The population size P</bold></italic> is chosen to be 4:</p>
<disp-formula id="S4.Ex10">
<mml:math id="M10">
<mml:mrow>
<mml:mrow>
<mml:mpadded width="+3.3pt">
<mml:mi>P</mml:mi>
</mml:mpadded>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mn>4</mml:mn>
</mml:mrow>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
<p><italic><bold>The fitness function F</bold></italic> is defined as F<sub><italic>i</italic></sub> = Z<sub><italic>max</italic></sub> &#x2212; Z<sub><italic>i</italic></sub>, where F<sub><italic>i</italic></sub> and Z<sub><italic>i</italic></sub> are the fitness and objective values of chromosome i and Z<sub><italic>max</italic></sub> is the maximum objective value in the population.</p>
<p><italic><bold>The GA operators</bold></italic> include selection, crossover, mutation, and replacement operators. The selection method is based on selection probabilities, determined by fitness values. The crossover method is OX (Order Crossover), the mutation method is SWAP, and the replacement method is acceptance threshold. The crossover probability P<sub><italic>c</italic></sub>, the mutation probability P<sub><italic>m</italic></sub>, and threshold K are chosen as follows:</p>
<disp-formula id="S4.Ex11">
<mml:math id="M11">
<mml:mrow>
<mml:msub>
<mml:mtext>P</mml:mtext>
<mml:mtext>c</mml:mtext>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.8</mml:mn>
<mml:mo>;</mml:mo>
<mml:mtext>&#x2009;&#x2009;</mml:mtext>
<mml:msub>
<mml:mtext>P</mml:mtext>
<mml:mtext>m</mml:mtext>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.2</mml:mn>
<mml:mo>;</mml:mo>
<mml:mtext>&#x2009;&#x2009;K</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:math>
</disp-formula>
<p><italic><bold>The termination rule:</bold></italic> The best objective value of the population Z<sub><italic>min</italic></sub> does not decrease after 15 consecutive iterations.</p>
<p><bold>Step 2: Generate the initial population P</bold><sup>(<bold>0</bold>)</sup><bold>, set k = 0</bold>.</p>
<p>The initial population consists of four chromosomes. Each initial individual is created including customer sequence and vehicle sequence, by randomizing the customer delivery points and available vehicles. The initial population <bold>P</bold><sup>(<bold>0</bold>)</sup> is shown in <xref ref-type="table" rid="T4">Table 4</xref>: <bold>P</bold><sup>(<bold>0</bold>)</sup> = {C1, C2, C3, C4}.</p>
<table-wrap position="float" id="T4">
<label>TABLE 4</label>
<caption><p>The initial population <bold>P</bold><sup>(0)</sup>.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sup>(0)</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
<td valign="top" align="center">Routes</td>
<td valign="top" align="center">V</td>
<td valign="top" align="center">Z</td>
<td valign="top" align="center">F</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C1</td>
<td valign="top" align="center">[1, 3, 2, 4, 7, 5, 6, 8]</td>
<td valign="top" align="center">[2, 3, 4, 5, 1, 6]</td>
<td valign="top" align="center">[1, 3]; [2]; [4, 7, 5]; [6, 8]</td>
<td valign="top" align="center">2, 3, 4, 5</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
</tr>
<tr>
<td valign="top" align="left">C2</td>
<td valign="top" align="center">[1, 4, 3, 8, 2, 6, 7, 5]</td>
<td valign="top" align="center">[3, 1, 2, 4, 5, 6]</td>
<td valign="top" align="center">[1, 4]; [3, 8]; [2]; [6, 7, 5]</td>
<td valign="top" align="center">3, 1, 2, 4</td>
<td valign="top" align="center">13</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left">C3</td>
<td valign="top" align="center">[6, 4, 1, 7, 8, 3, 5, 2]</td>
<td valign="top" align="center">[1, 3, 4, 5, 6, 2]</td>
<td valign="top" align="center">[6, 4]; [1, 7, 8]; [3, 5]; [2]</td>
<td valign="top" align="center">1, 3, 4, 5</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
</tr>
<tr>
<td valign="top" align="left">C4</td>
<td valign="top" align="center">[8, 5, 1, 7, 6, 2, 3, 4]</td>
<td valign="top" align="center">[1, 2, 4, 6, 3, 5]</td>
<td valign="top" align="center">[8, 5, 1, 7]; [6]; [2]; [3, 4]</td>
<td valign="top" align="center">1, 2, 4, 6</td>
<td valign="top" align="center">15</td>
<td valign="top" align="center">0</td>
</tr>
</tbody>
</table></table-wrap>
<p>From customer sequence S<sub>1</sub>, vehicle sequence S<sub>2</sub>, based on the constraints, the vehicles used, and their corresponding routes are determined, as shown in <xref ref-type="table" rid="T4">Table 4</xref>. From that, the objective values Z and fitness values F of each chromosome can be determined. In the initial population <bold>P</bold><sup>(<bold>0</bold>)</sup>, the best chromosomes are C2, with the best objective value Z of 13 (M).</p>
<p><bold>Step 3: Generate elite population P</bold><sub><bold>E</bold></sub><sup>(<bold>k</bold>)</sup>.</p>
<p>This step uses the selection operator to generate elite population P<sub><bold>E</bold></sub><sup>(<bold>k</bold>)</sup> from <bold>P</bold><sup>(<bold>k</bold>)</sup>. Each chromosome in the current population has a corresponding fitness value Fi and is selected for inclusion in the elite population <bold>P</bold><sub><bold>E</bold></sub><sup>(<bold>k</bold>)</sup> with selection probability P<sub><italic>i</italic></sub> determined as follows:</p>
<disp-formula id="S4.Ex12">
<mml:math id="M12">
<mml:mrow>
<mml:mi mathvariant="normal">P</mml:mi>
<mml:mmultiscripts>
<mml:mi mathvariant="normal">F</mml:mi>
<mml:mprescripts/>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:none/>
<mml:mo>=</mml:mo>
<mml:none/>
</mml:mmultiscripts>
<mml:mmultiscripts>
<mml:mo>/</mml:mo>
<mml:mprescripts/>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:none/>
</mml:mmultiscripts>
<mml:mi mathvariant="normal">&#x03A3;</mml:mi>
<mml:mmultiscripts>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="normal">F</mml:mi>
<mml:mmultiscripts>
<mml:mo stretchy="false">)</mml:mo>
<mml:mprescripts/>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:none/>
</mml:mmultiscripts>
</mml:mrow>
<mml:mprescripts/>
<mml:mi mathvariant="normal">i</mml:mi>
<mml:none/>
<mml:mo>=</mml:mo>
<mml:none/>
<mml:mn>1</mml:mn>
<mml:none/>
<mml:mo>&#x00F7;</mml:mo>
<mml:none/>
<mml:mn>4</mml:mn>
<mml:none/>
</mml:mmultiscripts>
<mml:mo>.</mml:mo>
</mml:mrow>
</mml:math>
</disp-formula>
<p>With population <bold>P</bold><sup>(<bold>0</bold>)</sup>, the values of F<sub><italic>i</italic></sub>, P<sub><italic>i</italic></sub>, and the cumulative probability function (CPF) are calculated as shown in <xref ref-type="table" rid="T5">Table 5</xref>. Random numbers <bold>R</bold><sub><bold>i</bold></sub> are generated 4 times. Based on CPF, the chromosomes selected into the population <bold>P</bold><sub><bold>E</bold></sub><sup>(<bold>0</bold>)</sup> are as <xref ref-type="table" rid="T6">Table 6</xref>.</p>
<table-wrap position="float" id="T5">
<label>TABLE 5</label>
<caption><p>Values of F<sub>i</sub>, P<sub>i</sub>, and the cumulative probability function (CPF).</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sup>(0)</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
<td valign="top" align="center">Z</td>
<td valign="top" align="center">F</td>
<td valign="top" align="center">P</td>
<td valign="top" align="center">CPF</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C1</td>
<td valign="top" align="center">[1, 3, 2, 4, 7, 5, 6, 8]</td>
<td valign="top" align="center">[2, 3, 4, 5, 1, 6]</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
</tr>
<tr>
<td valign="top" align="left">C2</td>
<td valign="top" align="center">[1, 4, 3, 8, 2, 6, 7, 5]</td>
<td valign="top" align="center">[3, 1, 2, 4, 5, 6]</td>
<td valign="top" align="center">13</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">0.5</td>
<td valign="top" align="center">0.75</td>
</tr>
<tr>
<td valign="top" align="left">C3</td>
<td valign="top" align="center">[6, 4, 1, 7, 8, 3, 5, 2]</td>
<td valign="top" align="center">[1, 3, 4, 5, 6, 2]</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">1</td>
</tr>
<tr>
<td valign="top" align="left">C4</td>
<td valign="top" align="center">[8, 5, 1, 7, 6, 2, 3, 4]</td>
<td valign="top" align="center">[1, 2, 4, 6, 3, 5]</td>
<td valign="top" align="center">15</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">1</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T6">
<label>TABLE 6</label>
<caption><p>The elite population <bold>P</bold><sub><bold>E</bold></sub><sup>(0)</sup> = {C2, C1, C3, C3}.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<tbody>
<tr>
<td valign="top" align="left"><bold>R<sub>i</sub></bold></td>
<td valign="top" align="center">0.569</td>
<td valign="top" align="center">0.194</td>
<td valign="top" align="center">0.828</td>
<td valign="top" align="center">0.913</td>
</tr>
<tr>
<td valign="top" align="left"><bold>P<sub>E</sub></bold><sup>(0)</sup></td>
<td valign="top" align="center">C2</td>
<td valign="top" align="center">C1</td>
<td valign="top" align="center">C3</td>
<td valign="top" align="center">C3</td>
</tr>
</tbody>
</table></table-wrap>
<p>Step 4: Generate the genetic population P<sub>G</sub><sup>(k)</sup>.</p>
<p>This step uses the crossover and mutation operators to generate genetic population P<sub><italic>G</italic></sub><sup>(k)</sup> from the elite population P<sub>E</sub><sup>(k)</sup>. The genetic population P<sub>G</sub><sup>(k)</sup> includes the new chromosome generated from the crossover and mutation operators.</p>
<p>The chromosomes of P<sub>E</sub><sup>(0)</sup> are selected to be included in the crossover list P<sub>c</sub> with the crossover probability of 0.8. After generating four random numbers R<sub>i</sub>, the set P<sub>c</sub> is determined as shown in <xref ref-type="table" rid="T7">Table 7</xref>. Each pair of chromosomes in P<sub>c</sub> is selected to cross over by the OX method, on both sub-chromosomes, resulting in two new chromosomes in population P<sup>C</sup>. C2 and C3 are crossed over to each other and generate two children, C5 and C6. The population P<sup>C</sup> is shown in <xref ref-type="table" rid="T8">Table 8</xref>.</p>
<table-wrap position="float" id="T7">
<label>TABLE 7</label>
<caption><p>The crossover list P<sub>c</sub> = {C2, C3}.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sub>E</sub><sup>(0)</sup></td>
<td valign="top" align="center">C2</td>
<td valign="top" align="center">C1</td>
<td valign="top" align="center">C3</td>
<td valign="top" align="center">C3</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><bold>R</bold><sub><bold>i</bold></sub></td>
<td valign="top" align="center">0.47</td>
<td valign="top" align="center">0.91</td>
<td valign="top" align="center">0.11</td>
<td valign="top" align="center">0.88</td>
</tr>
<tr>
<td valign="top" align="left"><bold>P</bold><sub><bold>c</bold></sub></td>
<td valign="top" align="center">C2</td>
<td valign="top" align="center">-</td>
<td valign="top" align="center">C3</td>
<td valign="top" align="center">-</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T8">
<label>TABLE 8</label>
<caption><p>The crossover population <bold>P</bold><sup><bold>C</bold></sup> = {C5, C6}.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sup>C</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C5</td>
<td valign="top" align="center">[6, 4, 3, 8, 1, 7, 5, 2]</td>
<td valign="top" align="center">[3, 1, 2, 4, 5, 6]</td>
</tr>
<tr>
<td valign="top" align="left">C6</td>
<td valign="top" align="center">[1, 4, 2, 8, 3, 5, 6, 7]</td>
<td valign="top" align="center">[1, 3, 4, 5, 2, 6]</td>
</tr>
</tbody>
</table></table-wrap>
<p>The chromosomes of <bold>P</bold><sub><bold>E</bold></sub><sup>(<bold>0</bold>)</sup> are also selected to be included in the mutation list <bold>P</bold><sub><bold>m</bold></sub> with the mutation probability of 0.2. After generating four random numbers <bold>R</bold><sub><bold>i</bold></sub>, the set <bold>P</bold><sub><bold>m</bold></sub> is determined as shown in <xref ref-type="table" rid="T9">Table 9</xref>. Each chromosome in <bold>P</bold><sub><bold>m</bold></sub> is selected to mutate by the SWAP method, on both sub-chromosomes, resulting in one new chromosome in population <bold>P</bold><sup><bold>M</bold></sup>. C1 is mutated and generates C7. The population <bold>P</bold><sup><bold>M</bold></sup> is shown in <xref ref-type="table" rid="T10">Table 10</xref>.</p>
<table-wrap position="float" id="T9">
<label>TABLE 9</label>
<caption><p>The mutation list P<sub><italic>m</italic></sub> = {C1}.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sub>E</sub><sup>(0)</sup></td>
<td valign="top" align="center">C2</td>
<td valign="top" align="center">C1</td>
<td valign="top" align="center">C3</td>
<td valign="top" align="center">C3</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><bold>R</bold><sub><bold>i</bold></sub></td>
<td valign="top" align="center">0.49</td>
<td valign="top" align="center">0.12</td>
<td valign="top" align="center">0.23</td>
<td valign="top" align="center">0.86</td>
</tr>
<tr>
<td valign="top" align="left"><bold>P</bold><sub><bold>m</bold></sub></td>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">C1</td>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">&#x2013;</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T10">
<label>TABLE 10</label>
<caption><p>The mutation population P<italic><sup>M</sup></italic> = {C7}.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sup>M</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C7</td>
<td valign="top" align="center">[6, 8, 2, 4, 7, 5, 1, 3]</td>
<td valign="top" align="center">[4, 5, 2, 3, 1, 6]</td>
</tr>
</tbody>
</table></table-wrap>
<p>After crossover and mutation, three new chromosomes are created in the population <bold>P</bold><sub><bold>G</bold></sub><sup>(<bold>0</bold>)</sup>. Chromosomes in <bold>P</bold><sub><bold>G</bold></sub><sup>(<bold>0</bold>)</sup> with their genes and objective values are shown in <xref ref-type="table" rid="T11">Table 11</xref>.</p>
<disp-formula id="S4.Ex13">
<mml:math id="M13">
<mml:mrow>
<mml:msub>
<mml:mtext mathvariant="bold">P</mml:mtext>
<mml:mtext>G</mml:mtext>
</mml:msub>
<mml:msup>
<mml:mrow>
</mml:mrow>
<mml:mrow>
<mml:mo stretchy='false'>(</mml:mo>
<mml:mn>0</mml:mn>
<mml:mo stretchy='false'>)</mml:mo>
</mml:mrow>
</mml:msup>
<mml:mo>=</mml:mo>
<mml:mrow>
<mml:mo>{</mml:mo>
<mml:mrow>
<mml:mtext>C</mml:mtext>
<mml:mn>5</mml:mn>
<mml:mo>,</mml:mo>
<mml:mtext>&#x2009;C</mml:mtext>
<mml:mn>6</mml:mn>
<mml:mo>,</mml:mo>
<mml:mtext>&#x2009;C</mml:mtext>
<mml:mn>7</mml:mn>
</mml:mrow>
<mml:mo>}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<table-wrap position="float" id="T11">
<label>TABLE 11</label>
<caption><p>The genetic population <bold>P</bold><sub><bold>G</bold></sub><sup>(0)</sup>.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sub>G</sub><sup>(0)</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
<td valign="top" align="center">Z</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C5</td>
<td valign="top" align="center">[7, 4, 3, 8, 2, 6, 1, 5]</td>
<td valign="top" align="center">[3, 1, 6, 4, 5, 2]</td>
<td valign="top" align="center">13</td>
</tr>
<tr>
<td valign="top" align="left">C6</td>
<td valign="top" align="center">[2, 8, 7, 1, 4, 3, 6, 5]</td>
<td valign="top" align="center">[3, 4, 5, 1, 2, 6]</td>
<td valign="top" align="center">14</td>
</tr>
<tr>
<td valign="top" align="left">C7</td>
<td valign="top" align="center">[6, 8, 2, 4, 7, 5, 1, 3]</td>
<td valign="top" align="center">[4, 5, 2, 3, 1, 6]</td>
<td valign="top" align="center">14</td>
</tr>
</tbody>
</table></table-wrap>
<p><bold>Step 5: Generate the next population P</bold><sup>(<bold>k</bold>+1)</sup></p>
<p>This step uses the replacement operator to generate the next population <bold>P</bold><sup>(<bold>k+1</bold>)</sup> from the populations <bold>P</bold><sup>(<bold>k</bold>)</sup> &#x0026; <bold>P</bold><sub><bold>G</bold></sub><sup>(<bold>k</bold>)</sup>. The chromosomes from P<sub><italic>G</italic></sub><sup>(k)</sup> will be added to the current population <bold>P</bold><sup>(<bold>k</bold>)</sup> to make the next population <bold>P</bold><sup>(<bold>k</bold>+1)</sup> if their objective values are better than the acceptable threshold, defined by the objective value of the threshold chromosome. The threshold chromosome is a chromosome in <bold>P</bold><sup>(<bold>k</bold>)</sup> with position n defined by population size P and threshold parameter K: n = P/k. With a population size of 4, and the replacement parameter K of 2, the acceptable threshold is selected as the value of the second chromosome of <bold>P</bold><sup>(<bold>k</bold>)</sup> in the top&#x2013;down ranking.</p>
<p>On the other side, in order to keep the next population size constant, some chromosomes in P<sup>(k)</sup> with the lowest fitness values are removed. In <bold>P</bold><sup>(<bold>0</bold>)</sup>, C1 is the second chromosome in the top&#x2013;down list, and the acceptable threshold is 14. Looking at the objective values of the chromosomes in population <bold>P</bold><sub><bold>G</bold></sub><sup>(<bold>0</bold>)</sup>, C5, C6, and C7 move into <bold>P</bold><sup>(<bold>1</bold>)</sup> and C1, C3, and C4 have to move out to keep <bold>P</bold><sup>(<bold>1</bold>)</sup> population size constant. <xref ref-type="table" rid="T12">Table 12</xref> shows the chromosomes in the next population <bold>P</bold><sup>(<bold>1</bold>)</sup>. In <bold>P</bold><sup>(1)</sup>, the best chromosomes are C2 and C3, with the best objective value of 13.</p>
<disp-formula id="S4.Ex14">
<mml:math id="M14">
<mml:mrow>
<mml:mtext mathvariant="bold">P</mml:mtext>
<mml:mmultiscripts>
<mml:mo rspace="5.8pt">=</mml:mo>
<mml:mprescripts/>
<mml:none/>
<mml:mrow>
<mml:mo stretchy="false">(</mml:mo>
<mml:mn>1</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
</mml:mrow>
</mml:mmultiscripts>
<mml:mrow>
<mml:mo stretchy="false">{</mml:mo>
<mml:mi>C2</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C5</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C6</mml:mi>
<mml:mo>,</mml:mo>
<mml:mi>C7</mml:mi>
<mml:mo stretchy="false">}</mml:mo>
</mml:mrow>
</mml:mrow>
</mml:math>
</disp-formula>
<table-wrap position="float" id="T12">
<label>TABLE 12</label>
<caption><p>The next population.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">P<sup>(1)</sup></td>
<td valign="top" align="center">S1</td>
<td valign="top" align="center">S2</td>
<td valign="top" align="center">Z</td>
<td valign="top" align="center">F</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">C2</td>
<td valign="top" align="center">[1, 4, 3, 8, 2, 6, 7, 5]</td>
<td valign="top" align="center">[3, 1, 2, 4, 5, 6]</td>
<td valign="top" align="center">13</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left">C5</td>
<td valign="top" align="center">[7, 4, 3, 8, 2, 6, 1, 5]</td>
<td valign="top" align="center">[3, 1, 6, 4, 5, 2]</td>
<td valign="top" align="center">13</td>
<td valign="top" align="center">2</td>
</tr>
<tr>
<td valign="top" align="left">C6</td>
<td valign="top" align="center">[2, 8, 7, 1, 4, 3, 6, 5]</td>
<td valign="top" align="center">[3, 4, 5, 1, 2, 6]</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
</tr>
<tr>
<td valign="top" align="left">C7</td>
<td valign="top" align="center">[6, 8, 2, 4, 7, 5, 1, 3]</td>
<td valign="top" align="center">[4, 5, 2, 3, 1, 6]</td>
<td valign="top" align="center">14</td>
<td valign="top" align="center">1</td>
</tr>
</tbody>
</table></table-wrap>
<p><bold>Step 6. Check the termination rule.</bold></p>
<p>After iteration 1, the best objective value is 13, appearing only twice. The termination rule is not satisfied, so iteration 2 is executed.</p>
</sec>
<sec id="S5">
<title>5. The GA model with experiments for the pilot VRP</title>
<p>Experiments are performed on the above GA model with a population size P of 20, and the two input factors are the probability of crossover P<sub><italic>c</italic></sub> and the probability of mutation P<sub><italic>m</italic></sub>. The probability P<sub><italic>c</italic></sub> has three levels 0.8, 0.9, and 1. The probability P<sub><italic>m</italic></sub> has three levels 0.3, 0.5, and 0.7. The run charts of the objective values Z in nine combinations of P<sub><italic>c</italic></sub>, P<sub><italic>m</italic></sub> are shown in <xref ref-type="fig" rid="F1">Figure 1</xref>. The nine combinations (P<sub><italic>c</italic></sub>, P<sub><italic>m</italic></sub>) give the same objective value, but the combination (0.8, 0.5) has the smallest number of iterations. This combination is used to solve real-world problems.</p>
<fig id="F1" position="float">
<label>FIGURE 1</label>
<caption><p>The objective values Z in nine combinations of P<sub><italic>c</italic></sub>, P<sub><italic>m</italic></sub>.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijomrp-2023-12-g001.tif"/>
</fig>
<p>The nine combinations (P<sub><italic>c</italic></sub>, P<sub><italic>m</italic></sub>) give the same objective value, but the combination (0.8, 0.5) has the smallest number of iterations, as shown in <xref ref-type="fig" rid="F2">Figure 2</xref>. This combination is used to solve real problems.</p>
<fig id="F2" position="float">
<label>FIGURE 2</label>
<caption><p>The objective value Z in combination of 0.8, 0.5.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijomrp-2023-12-g002.tif"/>
</fig>
</sec>
<sec id="S6">
<title>6. The GA model for the real VRP</title>
<p>The real problem is a VRP problem with 12 trucks and 97 customers (V = 12, N = 97). The parameters of fleet, customers, and travel time between nodes are shown in <xref ref-type="table" rid="T13">Tables 13</xref>&#x2013;<xref ref-type="table" rid="T15">15</xref>.</p>
<table-wrap position="float" id="T13">
<label>TABLE 13</label>
<caption><p>Loads, time limits, and fleet costs.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">V</td>
<td valign="top" align="center">1&#x00F7;6</td>
<td valign="top" align="center">7&#x00F7;9</td>
<td valign="top" align="center">10</td>
<td valign="top" align="center">11&#x00F7;12</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Q<sub><italic>v</italic></sub> (kg)</td>
<td valign="top" align="center">1000</td>
<td valign="top" align="center">1400</td>
<td valign="top" align="center">1900</td>
<td valign="top" align="center">2000</td>
</tr>
<tr>
<td valign="top" align="left">f<sub><italic>v</italic></sub>(M)</td>
<td valign="top" align="center">1.150</td>
<td valign="top" align="center">1.600</td>
<td valign="top" align="center">1.800</td>
<td valign="top" align="center">2.000</td>
</tr>
<tr>
<td valign="top" align="left">T<sub><italic>v</italic></sub> (h)</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
<td valign="top" align="center">8</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T14">
<label>TABLE 14</label>
<caption><p>Demand, unloading time at delivery points.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">i</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">97</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left"><bold>d</bold><sub><bold>i</bold></sub> (kg)</td>
<td valign="top" align="center">14.5</td>
<td valign="top" align="center">17</td>
<td valign="top" align="center">9</td>
<td valign="top" align="center">14.5</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">1000</td>
</tr>
<tr>
<td valign="top" align="left"><bold>S</bold><sub><italic>i</italic></sub>(<bold>h</bold>)</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">0.25</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">0.25</td>
</tr>
</tbody>
</table></table-wrap>
<table-wrap position="float" id="T15">
<label>TABLE 15</label>
<caption><p>Travel time T<sub><italic>ij</italic></sub> (h) between nodes.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left"></td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">1</td>
<td valign="top" align="center">2</td>
<td valign="top" align="center">3</td>
<td valign="top" align="center">4</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">97</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">0</td>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.313</td>
<td valign="top" align="center">0.214</td>
<td valign="top" align="center">0.124</td>
<td valign="top" align="center">0.521</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">0.365</td>
</tr>
<tr>
<td valign="top" align="left">1</td>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.651</td>
<td valign="top" align="center">0.145</td>
<td valign="top" align="center">0.689</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">0.287</td>
</tr>
<tr>
<td valign="top" align="left">2</td>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.09</td>
<td valign="top" align="center">0.871</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">0.697</td>
</tr>
<tr>
<td valign="top" align="left">3</td>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">0.416</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">1.010</td>
</tr>
<tr>
<td valign="top" align="left">4</td>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">&#x2026;</td>
<td valign="top" align="center">0.723</td>
</tr>
<tr>
<td valign="top" align="left">&#x2026;</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
<td valign="top" align="center">&#x2026;</td>
</tr>
<tr>
<td valign="top" align="left">97</td>
<td/>
<td/>
<td/>
<td/>
<td/>
<td/>
<td valign="top" align="center">&#x2013;</td>
</tr>
</tbody>
</table></table-wrap>
<p>The real problem model is set up according to the above parameters. The GA model is used to solve the problem with the parameter:</p>
<disp-formula id="S6.Ex15">
<mml:math id="M15">
<mml:mrow>
<mml:mtext>P</mml:mtext>
<mml:mo>=</mml:mo>
<mml:mn>20</mml:mn>
<mml:mo>,</mml:mo>
<mml:mtext>&#x2009;</mml:mtext>
<mml:msub>
<mml:mtext>P</mml:mtext>
<mml:mtext>C</mml:mtext>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.8</mml:mn>
<mml:mo>,</mml:mo>
<mml:mtext>&#x2009;</mml:mtext>
<mml:msub>
<mml:mtext>P</mml:mtext>
<mml:mtext>M</mml:mtext>
</mml:msub>
<mml:mo>=</mml:mo>
<mml:mn>0.5</mml:mn>
</mml:mrow>
</mml:math>
</disp-formula>
<p>The run chart of the total cost Z is as <xref ref-type="fig" rid="F3">Figure 3</xref>. The result has a total cost of 7.1 million with the vehicles used and the corresponding route as shown in <xref ref-type="table" rid="T16">Table 16</xref>.</p>
<fig id="F3" position="float">
<label>FIGURE 3</label>
<caption><p>Total cost Z.</p></caption>
<graphic mimetype="image" mime-subtype="tiff" xlink:href="bijomrp-2023-12-g003.tif"/>
</fig>
<table-wrap position="float" id="T16">
<label>TABLE 16</label>
<caption><p>The vehicles used and the corresponding route by genetic algorithm.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">v</td>
<td valign="top" align="left">Route</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">2</td>
<td valign="top" align="left">[0, 12, 77, 82, 64, 50, 60, 42, 69, 93, 28, 87, 30, 11, 21, 32, 96, 25, 56, 91, 53, 5, 23]</td>
</tr>
<tr>
<td valign="top" align="left">5</td>
<td valign="top" align="left">[0, 6, 75, 66, 57, 9, 72, 73, 22, 16, 41, 89, 81, 13, 19, 36, 20, 79, 92, 74, 24, 43, 2, 90]</td>
</tr>
<tr>
<td valign="top" align="left">7</td>
<td valign="top" align="left">[0, 97, 26, 44, 95, 48, 15, 4]</td>
</tr>
<tr>
<td valign="top" align="left">8</td>
<td valign="top" align="left">[0, 71, 94, 45, 18, 51, 14, 3, 59, 84, 70, 65,88, 52, 8, 38, 61, 63, 86, 58, 10, 54, 62]</td>
</tr>
<tr>
<td valign="top" align="left">9</td>
<td valign="top" align="left">[0, 7, 31, 47, 1, 29, 80, 40, 76, 67, 39, 49, 37, 35, 68, 46, 83, 17, 78, 34, 55, 27, 33, 85]</td>
</tr>
</tbody>
</table></table-wrap>
<p>The comparison between the current method and the GA model is shown in <xref ref-type="table" rid="T17">Table 17</xref>. Compared with the current model, the GA model has a cost reduction of 7.55 million to 7.1 million (17.88%), the number of late delivery points reduced from 11 to 0, and the service level increased from 88.7 to 100%.</p>
<table-wrap position="float" id="T17">
<label>TABLE 17</label>
<caption><p>Total cost between the current method and the genetic algorithm (GA) model.</p></caption>
<table cellspacing="5" cellpadding="5" frame="hsides" rules="groups">
<thead>
<tr>
<td valign="top" align="left">Model</td>
<td valign="top" align="center">Total cost (million)</td>
<td valign="top" align="center">Number of late delivery nodes</td>
<td valign="top" align="center">Service level (%)</td>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">Current model</td>
<td valign="top" align="center">7.55</td>
<td valign="top" align="center">11</td>
<td valign="top" align="center">88.7</td>
</tr>
<tr>
<td valign="top" align="left">GA</td>
<td valign="top" align="center">7.1</td>
<td valign="top" align="center">0</td>
<td valign="top" align="center">100</td>
</tr>
</tbody>
</table></table-wrap>
</sec>
<sec id="S7" sec-type="conclusion">
<title>7. Conclusion</title>
<p>The GA model has been used to solve the VRP in a distribution system with one warehouse, 12 trucks, and 97 customers. The results show that the GA model gives lower cost and higher service level than the heuristic method, being used. However, the parameters of the model are only selected empirically, so the results are not very good. Future research is to use experimental design DOE to determine the model parameters to get suboptimal results.</p>
</sec>
<sec id="S8" sec-type="author-contributions">
<title>Author contributions</title>
<p>PN is the thesis advisor of TT. PN and TT contributed to the thesis conception and design. PN has developed the research models for the thesis. TT has collected and analyzed data and written program to run the algorithms, based on the models. PN has composed the article, based on the thesis. Both authors read and approved the final manuscript.</p>
</sec>
</body>
<back>
<ack><p>We extend our heartfelt appreciation to everyone who has contributed to the completion of this research article, especially our families, HCMC University of Technology, and the scientific community for their invaluable support.</p>
</ack>
<sec id="S9" sec-type="COI-statement">
<title>Conflict of interest</title>
<p>The research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
<ref-list>
<title>References</title>
<ref id="B1"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Foroutan</surname> <given-names>RA</given-names></name> <name><surname>Rezaeian</surname> <given-names>J</given-names></name> <name><surname>Mahdavi</surname> <given-names>I</given-names></name></person-group>. <article-title>Green vehicle routing and scheduling problem with heterogeneous fleet including reverse logistics in the form of collecting returned goods.</article-title> <source><italic>Appl Soft Comput.</italic></source> (<year>2020</year>) <volume>94</volume>:<issue>106462</issue>.</citation></ref>
<ref id="B2"><label>2.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kumar</surname> <given-names>V</given-names></name> <name><surname>Panneerselvam</surname> <given-names>R</given-names></name></person-group>. <article-title>A study of crossover operators for genetic algorithms to solve VRP and its variants and new sinusoidal motion crossover operator.</article-title> <source><italic>Int J Comput Intell Res.</italic></source> (<year>2017</year>) <volume>13</volume>:<fpage>1717</fpage>&#x2013;<lpage>33</lpage>.</citation></ref>
<ref id="B3"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Ruiz</surname> <given-names>E</given-names></name> <name><surname>Soto-Mendoza</surname> <given-names>V</given-names></name> <name><surname>Ruiz Barbosa</surname> <given-names>AE</given-names></name> <name><surname>Reyes</surname> <given-names>R</given-names></name></person-group>. <article-title>Solving the open vehicle routing problem with capacity and distance constraints with a biased random key genetic algorithm.</article-title> <source><italic>Comput Ind Eng.</italic></source> (<year>2019</year>) <volume>133</volume>:<fpage>207</fpage>&#x2013;<lpage>19</lpage>.</citation></ref>
<ref id="B4"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Sariklis</surname> <given-names>D</given-names></name> <name><surname>Powell</surname> <given-names>S</given-names></name></person-group>. <article-title>A heuristic method for the open vehicle routing problem.</article-title> <source><italic>J Oper Res Soc.</italic></source> (<year>2000</year>) <volume>51</volume>:<fpage>564</fpage>&#x2013;<lpage>73</lpage>.</citation></ref>
<ref id="B5"><label>5.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Liu</surname> <given-names>S</given-names></name> <name><surname>Huang</surname> <given-names>W</given-names></name> <name><surname>Ma</surname> <given-names>H</given-names></name></person-group>. <article-title>An effective genetic algorithm for the fleet size and mix vehicle routing problems.</article-title> <source><italic>Transp Res E.</italic></source> (<year>2008</year>) <volume>45</volume>:<fpage>434</fpage>&#x2013;<lpage>45</lpage>.</citation></ref>
<ref id="B6"><label>6.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Baldacci</surname> <given-names>R</given-names></name> <name><surname>Battarra</surname> <given-names>M</given-names></name> <name><surname>Vigo</surname> <given-names>D</given-names></name></person-group>. <article-title>Routing a heterogeneous fleet of vehicles.</article-title> In: <person-group person-group-type="editor"><name><surname>Golden</surname> <given-names>B</given-names></name> <name><surname>Raghavan</surname> <given-names>S</given-names></name> <name><surname>Wasil</surname> <given-names>E</given-names></name></person-group> <role>editors</role>. <source><italic>The vehicle routing problem: latest advances and new challenges.</italic></source> <publisher-loc>Boston, MA</publisher-loc>: <publisher-name>Springer</publisher-name> (<year>2008</year>).</citation></ref>
<ref id="B7"><label>7.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kan</surname> <given-names>H</given-names></name> <name><surname>Lee</surname> <given-names>AHI</given-names></name></person-group>. <article-title>An enhanced approach for the multiple vehicle routing problem with heterogeneous vehicles and a soft time window.</article-title> <source><italic>Symmetry.</italic></source> (<year>2018</year>) <volume>10</volume>:<issue>650</issue>.</citation></ref>
</ref-list>
</back>
</article>
