این صفحه چرخه عمر طرح مسیر را بااستفاده از «میانای برنامهسازی کاربردی بهینهسازی مسیر» توضیح میدهد، از شناسایی نیازهای مسیریابی شما شروع میشود و با طرح مسیر یکپارچه در سیستم شما پایان مییابد.
وقتی مراحل طرح مسیر را دنبال میکنید، میتوانید به اهداف زیر دست یابید:
- عملیات ناوگان خود را نگاشت کنید: ناوگان فیزیکی، محدودیتهای پیچیده، و اهداف کسبوکار خود را به کد برای API ترجمه کنید.
- بهینهسازی طرحهای مسیر برای کسبوکارتان: با نحوه پالایش طرح مسیرتان آشنا شوید تا بتوانید به اهدافتان برسید و عملیات روزانهتان را بهبود ببخشید.
- استقرار در تولید: طرح مسیرتان را با گنجاندن آن در عملیات روزمرهتان پیادهسازی کنید.
نمودار زیر عمر طرح مسیر را نشان میدهد.
فاز پیادهسازی طرح مسیر زمانی اتفاق میافتد که برای اولینبار میانای برنامهسازی کاربردی را ادغام میکنید یا زمانی که الزامات کسبوکارتان بهطور قابلتوجهی تغییر میکند. مراحل ۱ تا ۵ را پوشش میدهد.
فاز عملیات روزانه سبکتر است و پالایش در آن حداقل است. این طرح مراحل ۲ تا ۴ را پوشش میدهد.
مراحل عمر یک مسیر به شرح زیر است:
- مشکلتان را محدود کنید: اهداف، منابع، تکالیف، و محدودیتهایتان را شناسایی و سازماندهی کنید تا قبلاز شروع استفاده از API، تصویری کامل از عملیاتتان داشته باشید.
- دادههایتان را نگاشت کنید: واقعیت کسبوکارتان را به پارامترهای API ترجمه کنید تا طرح مسیر نشان دهد ناوگان شما چگونه باید کار کند.
- درخواست ایجاد کنید و طرح مسیر دریافت کنید: دادههایتان را در میانای برنامهسازی کاربردی وارد کنید و طرح مسیر بهینهشدهتان را دریافت کنید.
- بهبود طرح مسیر: طرح مسیرتان را آزمایش کنید و با تنظیم محدودیتها و اهداف، آن را تکرار کنید تا مطمئن شوید همه نیازهایتان را پوشش میدهد.
- ادغام طرح مسیر: طرح مسیر را به سیستمهای موجودتان متصل کنید تا ناوبری قابلاجرا ارائه دهید.
مشکلتان را محدود کنید
قبلاز استفاده از API، باید جزئیات عملیات روزانه خود را در دستههای دادهای واضح سازماندهی کنید. این کار به شما امکان میدهد فرایند پیادهسازی را با شفافیت درباره منابع و وظایف فعلیتان، محدودیتهای آنها، و اهدافی که میخواهید با ناوگانتان به آنها دست یابید شروع کنید.
منابع و تکالیفتان را شناسایی کنید
مرحله مهمی در برنامهریزی طرح مسیر، شناسایی منابع و وظایف است که همان خودروها و محمولههای شما هستند.
| خودروها | محمولهها |
|---|---|
|
|
شناسایی محدودیتها
محدودیتهای شما عبارتند از حدود و محدودیتهای مربوط به نحوه استفاده از وسایل نقلیه و نحوه رسیدگی به محمولهها. این محدودیتها اکثر عملیات شما را دیکته میکنند و هنگام ایجاد طرح مسیر بهینهشده حیاتی هستند.
محدودیتها معمولاً در دو دسته قرار میگیرند:
| محدودیتهای سخت | محدودیتهای نرم |
|---|---|
| اینها محدودیتهایی هستند که نمیتوان آنها را شکست. برای مثال، کامیون نمیتواند وزنی بیشتر از حداکثر ظرفیتش حمل کند و راننده نمیتواند بعداز بسته شدن فروشگاه، کالا را تحویل بگیرد. | اینها ترجیحاتی هستند که درصورت لزوم میتوانند نقض شوند، معمولاً با هزینه جریمه. برای مثال، ممکن است ترجیح دهید کامیون را فقط تا ۸۰٪ ظرفیت بارگیری کنید یا قبلاز زمان هدف تحویل دهید، اما مشکلی ندارید که برای دریافت مسیر بهتر از این حدود فراتر بروید. |
محدودیتهای رایج عبارتاند از:
- محدودیتهای ظرفیت: حداکثر وزن، حجم، یا تعداد مواردی که خودرو میتواند حمل کند.
- بازه زمانی: بازههای زمانی خاصی که مکانی برای بازدید باز است، یا ساعتهای شیفت کاری خاص یک راننده.
- هزینهها: هزینه راندن خودرو یا صرفنظر کردن از ارسال. یکی از اهداف اصلی این میانای برنامهسازی کاربردی تولید طرح مسیر مقرونبهصرفه است.
- استراحت راننده: دورههای استراحت راننده که معمولاً طبق قوانین کار پساز تعداد مشخصی ساعت کاری الزامی است.
اهداف کسبوکارتان را تعیین کنید
وقتی منابع و تکالیف و محدودیتهای آنها را مشخص کردید، وقت آن است که مشخص کنید کدام سنجهها برای کسبوکارتان از همه مهمتر است. این اهداف با محدودیتها همراه هستند و به شما کمک میکنند تصمیم بگیرید که هنگام برنامهریزی مسیر چه چیزی بیشتر اهمیت دارد.
در زیر چند نمونه از اهداف کسبوکار آورده شده است:
| اندازه ناوگان | مسافت | زمان | هزینه |
|---|---|---|---|
| آیا میخواهید تعداد خودروهای مورداستفاده را به حداقل برسانید یا از کل ناوگان خود استفاده کنید تا روز کاری زودتر تمام شود؟ | آیا کوتاهترین مسیر را برای صرفهجویی در مصرف سوخت میخواهید، یا مسیر سریعتری را ترجیح میدهید که ممکن است بهدلیل استفاده از بزرگراهها طولانیتر باشد؟ | آیا میخواهید کل ساعات کاری را بهحداقل برسانید یا رسیدن در زمانهای خاص را در اولویت قرار دهید که میتواند زمان صرفشده در مسیر را طولانیتر کند؟ | آیا میخواهید هزینههای عملیاتی مانند دستمزد و سوخت را به حداقل برسانید یا هزینههای بالاتر را برای رعایت مهلتهای سخت بپذیرید؟ |
نگاشت دادهها
پساز جمعآوری دادههایتان، آنها را برای مطابقت با داراییهای API نگاشت کنید. این کار همه اطلاعات را به بهینهساز میدهد تا طرح مسیری را برگرداند که واقعیت کسبوکارتان را درنظر میگیرد.
از پارامترهای جدولهای بعدی برای نگاشت منابع، تکالیف، محدودیتها، و اهدافی که در بخش تعیین دامنه مشکل نگاشت کردهاید استفاده کنید.
تخصیص دادن متغیر
| مفهوم دنیای واقعی | پارامتر میانای برنامهسازی کاربردی | شرح |
|---|---|---|
| راننده یا وسیله نقلیه | model.vehicles[] |
نشاندهنده یک خودرو در ناوگان شما است. |
| مکانهای انبار |
vehicles[].startWaypointvehicles[].endWaypoint
|
مکان شروع و پایان مسیر خودرو. |
| ساعت کاری شما |
model.globalStartTimemodel.globalEndTime
|
زودترین زمان شروع و دیرترین زمان پایان برای کل عملیات ناوگان. |
| تکلیف یا بسته | model.shipments[] |
نشاندهنده شغل است. میتواند pickup، delivery، یا هر دو باشد. |
| مکان تکلیف |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
مکان جغرافیایی که شغل در آنجا انجام میشود. |
| زمان سرویس |
pickups[].durationdeliveries[].duration
|
زمان صرفشده در مکان برای تکمیل تکلیف (برای مثال، تخلیه بار)، بدون احتساب زمان سفر. |
تخصیص دادن محدودیت
| محدودیت دنیای واقعی | پارامتر میانای برنامهسازی کاربردی | شرح |
|---|---|---|
| ظرفیت خودرو | vehicles[].loadLimits |
حد سخت یا نرم را برای ظرفیت خودرو تنظیم میکند. اگر loadDemand محمولهای از حد مجاز باقیمانده فراتر رود، محموله اختصاص داده نمیشود. |
| اندازه بسته | shipments[].loadDemands |
مقدار ظرفیت خودرو که یک محموله مصرف میکند. |
| محدودیت وسیله نقلیه | shipments[].allowedVehicleIndices |
محموله را محدود میکند تا فقط توسط وسایل نقلیه یا رانندگان خاصی تحویل گرفته یا تحویل داده شود. |
| ساعتهای دردسترس | shipments[].pickups[].timeWindows یا shipments[].deliveries[].timeWindows |
ساعتهای دردسترس برای بازدید از مکان را تنظیم میکند. اگر خودرویی نتواند در این بازه زمانی برسد، از ارسال صرفنظر میشود. |
| محدودیت طول نوبت | vehicles[].routeDurationLimit |
صرفنظر از زمان پایان جهانی، سقف سخت یا نرمی برای مدت زمانی که راننده خاصی میتواند کار کند (برای مثال، حداکثر ۸ ساعت) تعیین میکند. |
| استراحت راننده | vehicles[].breakRule |
قوانین استراحت خاصی را اعمال میکند، مانند استراحتهای اجباری پساز ساعات کاری مشخص. |
| محدودیتهای جادهای | vehicles[].travelMode |
حالت سفر را مشخص میکند (برای مثال، DRIVE یا BICYCLE). این کار مسیر را به جادههای قانونی محدود میکند و سرعتهای مورداستفاده برای محاسبه مدت سفر را تعیین میکند. |
تخصیص دادن هدف
| هدف دنیای واقعی | پارامتر میانای برنامهسازی کاربردی | شرح |
|---|---|---|
| کمینه کردن اندازه ناوگان | vehicles[].fixedCost |
هزینه یکبارهای را برای استفاده از خودرو اعمال میکند. هزینه ثابت بالا باعث میشود که مسیر بهجای افزایش کل مسافت یا زمان کار، استفاده از وسایل نقلیه کمتر را در اولویت قرار دهد. |
| کمینه کردن فاصله | vehicles[].costPerKilometer |
هزینهای برای هر کیلومتر طیشده اعمال میکند. مسیرهای کوتاهتر را برای صرفهجویی در سوخت و کاهش استهلاک در اولویت قرار میدهد. |
| بهحداقل رساندن کل زمان | vehicles[].costPerHour |
هزینهای برای هر ساعت فعال بودن خودرو (شامل زمان سفر و انتظار) اعمال میکند. تکمیل سریعتر را در اولویت قرار میدهد. |
| کمینه کردن زمان رانندگی | vehicles[].costPerTraveledHour |
هزینهای را بهطور ویژه برای زمان صرفشده برای جابهجایی اعمال میکند. این ویژگی بین نشستن در ترافیک (گران) و انتظار در ایستگاه(احتمالاً ارزانتر) تمایز قائل میشود. |
| اولویتبندی کردن تکالیف خاص | shipments[].penaltyCost |
اگر از ارسال خاصی صرفنظر شود، هزینه اعمال میشود. تنظیم این مقدار بالا تضمین میکند که تکالیف مهم نسبت به تکالیف اختیاری اولویتبندی شوند. |
درخواست را ایجاد کنید و پاسخ دریافت کنید
استفاده از Route Optimization API برای تولید طرح مسیر شامل مراحل زیر است:
- پیکربندی محیط: پروژه Google Cloud خود را راهاندازی کنید، API را فعال کنید، و اصالتسنجی را پیکربندی کنید. برای دستورالعملها، به شروع به کار مراجعه کنید. کافی است فقط یکبار این مرحله را دنبال کنید.
- ارسال درخواست: بدنه درخواست را بااستفاده از نگاشت داده تعریفشده در بخش قبلی بسازید. برای اطلاعات درباره نقاط پایانی، سرصفحهها، و قالببندی درخواست، به ارسال درخواست API مراجعه کنید.
- درک پاسخ: پساز دریافت پاسخ از API، طرح مسیر و معنی هر پارامتر را درک کنید. تفسیر پاسخ را ببینید.
پالایش کردن طرح مسیر
ترجمه تدارکات دنیای واقعی به هزینهها و محدودیتهای میانای برنامهسازی کاربردی کار پیچیدهای است. طرح مسیر اولیه شما ممکن است با اهداف کسبوکار یا انتظارات راننده مطابقت نداشته باشد. پالایش طرح مسیر، فرایند تکراری آزمایش مسیرهای برگشتی و تنظیم پارامترها است تا زمانی که به تنظیماتی برسید که اهداف شما را برآورده کند.
اصلاح اهداف و محدودیتها
اگر طرح مسیر تولیدشده نیازهای شما را برآورده نمیکند، میتوانید پارامترهای خاصی را اصلاح کنید تا به نتایج متفاوتی دست یابید. سختگیرانه یا آسانگیرانه کردن پارامترها نحوه حل اهداف متناقض را در طرح مسیر تغییر میدهد، و آسانگیرانه کردن پارامترها روشی کارآمد برای کشف پارامترهایی است که باعث ایجاد خطا در طرحهای مسیر شما میشوند.
جدول زیر مشکلات رایج مسیریابی و پارامترهایی را که میتوانید برای حلوفصل کردن آنها تنظیم کنید فهرست میکند.
| سناریو | پارامتر | تعدیل | شرح |
|---|---|---|---|
| ارسال مهمی رد شده است | shipments[].penaltyCost |
مقدار آن را افزایش دهید یا هزینههای جریمه را به محمولههای دیگر اضافه کنید | اگر ارسال اختیاری است، هزینه جریمه آن را افزایش دهید تا در اولویت قرار گیرد. اگر ارسال اجباری است (هزینه جریمه ندارد)، هزینههای جریمه را به محمولههای دیگر، محمولههای کماهمیتتر اضافه کنید. این کار باعث میشود که این موارد اختیاری شوند و زمان و ظرفیت خودرو برای محموله مهم آزاد شود. |
| ارسال بهدلیل زمانبندی رد شد | softStartTime / softEndTime |
افزودن بازههای زمانی نرم | پنجرههای زمانی سختگیر تکالیفی را که حتی یک دقیقه دیر شده باشند رها میکنند. پنجرههای نرم به راننده اجازه میدهند با پرداخت «هزینه» بهجای عدم موفقیت در انجام مأموریت، کمی خارجاز برنامه برسد. |
| ارسال بهدلیل وزن رد شد | loadLimits[].softMaxLoad و costPerUnitAbove |
افزودن تقاضاهای بار نرم | به خودرو اجازه میدهد تا کمی از ظرفیت ایدهآل خود فراتر رود (با جریمه) بهجای اینکه بستهای را جا بگذارد. |
| ارسال بهدلیل بار بیشازحد ناوگان رد شده است | model.vehicles[] یا shipments[].timeWindows |
افزودن خودرو یا کاهش دادن پنجرههای زمانی | اگر تعداد محمولهها برای ناوگان فعلی خیلی زیاد است، بهویژه در ساعات اوج مصرف، وسایل نقلیه بیشتری اضافه کنید یا پنجرههای تحویل را گسترش دهید تا حجم کار توزیع شود. |
| مسیرها خیلی طولانی یا ناکارآمد هستند | vehicles[].costPerKilometer / costPerHour |
افزودن هزینهها یا افزایش مقدار آنها | به API میگوید که سفر گران است و آن را تشویق میکند تا توقفهای دور و جدا را حذف کند تا مسیرهای کوتاهتری برای ناوگان ایجاد کند. |
| شیفتهای راننده خیلی طولانی است | vehicles[].routeDurationLimit یا model.vehicles[] |
افزودن محدودیتهای مدت، یا افزودن خودروها و محدودیتها | برای کل زمانی که راننده در جاده میگذراند، سقف سختی (برای مثال، ۸ ساعت) اعمال میکند. افزودن خودرو بهتنهایی باعث کوتاهتر شدن مسیرها نمیشود، مگر اینکه محدودیتهای مدت زمان را نیز اعمال کنید تا حلکننده را مجبور کنید حجم کار را در ناوگان بزرگتر توزیع کند. |
بهروزرسانی طرح مسیر
اغلب لازم است طرح مسیر را بهروز کنید و درعینحال پایه را یکسان نگه دارید، مثلاً افزودن تحویل به برنامه راننده فعال. برای انجام این کار، از پارامترهای تزریق استفاده کنید که براساس راهحل قبلی شما، نقطهشروعی برای میانای برنامهسازی کاربردی فراهم میکند و به آن اجازه میدهد طرح موجود را بهجای محاسبه طرحی جدید از ابتدا، اصلاح کند.
در زیر روشهای مختلفی برای بهروزرسانی طرح مسیر با پارامترهای تزریق آورده شده است:
- مسیرها را از پاسخ قبلی به فیلد
injectedFirstSolutionRoutesدرخواست جدیدتان منتقل کنید. این کار سرعت جستجوی بهینهسازی را افزایش میدهد و برای برنامهریزی مجدد قبلاز شروع عملیات روزانه، مانند ادغام محمولههای لحظه آخری، مفید است. - میزان تغییر را بااستفاده از فیلد
injectedSolutionConstraintکنترل کنید. این کار زمانی مفید است که عملیات ازقبل درحال انجام باشد و به شما امکان میدهد توالی فعلی راننده را حفظ کنید یا بخشهایی از طرح را که ازقبل اجرا شده است اصلاح کنید. - با تنظیم
interpretInjectedSolutionsUsingLabelsرویtrue، مطمئن شوید که مسیر بهروزشده همچنان به خودرو صحیح اختصاص داده شده است. این ویژگی در آزمایش هنگام افزودن یا حذف محمولهها و وسایل نقلیه مفید است، زیرا مسیرها را بااستفاده از برچسبها بهجای شاخصها مطابقت میدهد. این امر مستلزم آن است که همه برچسبهای خودرو و محموله یکتا باشند.
ادغام کردن طرح مسیر
طرح مسیر نهاییشده شما یک شیء داده است که نشاندهنده مدیریت بهینهشده منابع و تکالیف شما است، درحالیکه از محدودیتها و اهداف شما پیروی میکند. با ادغام این طرح مسیر در سیستم خود، از آن در عملیات روزانه استفاده کنید. این کار معمولاً شامل تجسم کردن طرح مسیر برای مدیران ناوگان و ارسال دستورالعملهای گامبهگام به رانندگان میشود.
نمایش تصویری
برای اینکه مدیران ناوگان بتوانند طرح مسیر شما را تأیید و نظارت کنند، میتوانید طرح مسیرتان را به روشهای زیر تجسم کنید:
برای اینکه مدیران ناوگان بتوانند طرح مسیرتان را تأیید و نظارت کنند، میتوانید آن را در نقشه داشبورد نمایش دهید. بسته به مرحله توسعه فعلیتان، میتوانید طرح مسیرتان را به روشهای زیر تجسم کنید:
- کاوش بدون کد: میتوانید از برنامه Route Optimization متنباز استفاده کنید تا ببینید API چگونه دادههای شما را به مسیرهای فیزیکی روی نقشه ترجمه میکند. این برنامه وب بهعنوان ابزاری اکتشافی عمل میکند که به شما امکان میدهد سناریوها را بسازید، پارامترهای محدودیت را تنظیم کنید، و طرحهای مسیر حاصل را قبلاز نوشتن هرگونه کد بهصورت دیداری ارائه دهید.
- نمایش ترتیب بازدید: میتوانید توالی بازدیدها را بهصورت نقاط شمارهگذاریشده روی نقشه نشان دهید تا طرحهای بهینهسازی و اعزام را در سیستم خودتان ارزیابی کنید. برای انجام این کار، آرایه
visitsرا در هر مسیر پاسخ میانای برنامهسازی کاربردی پیدا کنید. موارد موجود در این آرایه دقیقاً به همان ترتیبی است که راننده باید آنها را اجرا کند. میتوانید در این فهرست پیمایش کنید، ازshipmentIndexبرای بازیابی مختصات مکان هر ایستگاه استفاده کنید، و از کتابخانه نقشهبرداری خود برای ارائه نشانگرهای شمارهدار روی نقشه براساس ترتیب آنها در فهرست استفاده کنید. - کشیدن مسیر فیزیکی: میتوانید مسیر دقیق برنامهریزیشده را روی نقشه
تصویرسازی کنید تا متوجه شوید چرا بهینهساز یک توالی خاص را انتخاب کرده است. این چندخطی نشاندهنده مسیر موردنظر برای برنامهریزی و ارزیابی است، نه مسیر همزمان طیشده توسط راننده.
populatePolylines: trueرا در درخواستتان تنظیم کنید تا برای هر مسیر فیلدencodedPolylineدریافت کنید و آن را بااستفاده از روشgoogle.maps.geometry.encoding.decodePath()از میانای برنامهسازی کاربردی جاوا اسکریپت Maps رمزگشایی کنید.
ارسال به رانندگان
میتوانید بااستفاده از «کیت توسعه نرمافزار ناوبری»، ناوبری گامبهگام را در برنامه راننده خود ادغام کنید یا پیوندهای عمیقی به برنامه مصرفکننده Google Maps ارائه دهید.
- کیت توسعه نرمافزار پیمایش: اگر برنامه راننده سفارشی دارید، میتوانید
کیت توسعه نرمافزار پیمایش برای Android یا
iOS را برای راهنمایی گامبهگام درونبرنامه ادغام کنید.
میتوانید اطلاعات تکلیف را از پاسخ میانای برنامهسازی کاربردی در سیستم خود ادغام کنید
و از کیت توسعه نرمافزار برای پیمایش استفاده کنید. برای ارسال مسیرها از پاسخ میانای برنامهسازی کاربردی به
کیت توسعه نرمافزار،
populateTransitionPolylines: trueرا در درخواستتان تنظیم کنید. این کار یکrouteTokenبرای هر انتقال در پاسخ تولید میکند. - Fleet Engine: برای مدیریت پیشرفته ناوگان، میتوانید طرح مسیر تولیدشده توسط API را به Fleet Engine وارد کنید تا اجرای مسیر را در زمان واقعی نظارت کنید. درحالیکه API یک چندخطی از مسیر موردنظر برای ارزیابی ارائه میدهد، Fleet Engine دنباله بازدیدهای برنامهریزیشده شما را با ردیابی زنده خودرو جفت میکند.