این صفحه چرخه عمر طرح مسیر را بااستفاده از Route Optimization API شرح میدهد، از شناسایی نیازهای مسیریابی شما شروع میشود و با طرح مسیر یکپارچه در سیستم شما پایان مییابد.
وقتی مراحل طرح مسیر را دنبال میکنید، میتوانید به اهداف زیر دست یابید:
- عملیات ناوگان خود را نگاشت کنید: ناوگان فیزیکی، محدودیتهای پیچیده، و اهداف کسبوکار خود را به کد برای 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، طرح مسیر و معنی هر پارامتر را درک کنید. تفسیر کردن پاسخ را ببینید.
پالایش کردن طرح مسیر
تبدیل تدارکات دنیای واقعی به هزینهها و محدودیتهای میانای برنامهسازی کاربردی کار پیچیدهای است. ممکن است طرح مسیر اولیه شما با اهداف کسبوکارتان یا انتظارات راننده مطابقت نداشته باشد. پالایش طرح مسیر، فرایند تکراری آزمایش مسیرهای برگشتی و تنظیم پارامترها است تا زمانی که به تنظیماتی برسید که اهداف شما را برآورده کند.
اصلاح اهداف و محدودیتها
اگر طرح مسیر تولیدشده نیازهای شما را برآورده نمیکند، میتوانید برخی پارامترها را تغییر دهید تا نتایج متفاوتی بهدست آورید. سختگیرانه یا آسانگیرانه کردن پارامترها نحوه حل اهداف متناقض را در طرح مسیر تغییر میدهد، و آسانگیرانه کردن پارامترها روشی کارآمد برای کشف پارامترهایی است که باعث ایجاد خطا در طرحهای مسیر شما میشوند.
جدول زیر مشکلات رایج مسیریابی و پارامترهایی را که میتوانید برای حل آنها تنظیم کنید فهرست میکند.
| سناریو | پارامتر | تعدیل | شرح |
|---|---|---|---|
| ارسال مهمی رد شده است | shipments[].penaltyCost |
مقدار آن را افزایش دهید یا هزینه جریمه را به محمولههای دیگر اضافه کنید | اگر ارسال اختیاری است، هزینه جریمه آن را افزایش دهید تا اولویتبندی شود. اگر محموله اجباری است (هزینه جریمه ندارد)، هزینه جریمه را به محمولههای دیگر که اهمیت کمتری دارند اضافه کنید. این کار باعث میشود این توقفها اختیاری شوند و زمان و ظرفیت خودرو برای محموله مهم آزاد شود. |
| ارسال بهدلیل زمانبندی رد شده است | softStartTime از softEndTime |
افزودن پنجرههای زمانی نرم | پنجرههای زمانی سخت تکالیفی را که حتی یک دقیقه دیر شدهاند رها میکنند. پنجرههای نرم به راننده اجازه میدهند با پرداخت «هزینه» بهجای عدم موفقیت در انجام مأموریت، کمی خارجاز برنامه برسد. |
| ارسال بهدلیل وزن رد شده است | loadLimits[].softMaxLoad و costPerUnitAbove |
افزودن درخواستهای بارگذاری نرمافزاری | به خودرو اجازه میدهد تا کمی از ظرفیت ایدهآل خود فراتر رود (با جریمه) بهجای اینکه بستهای را جا بگذارد. |
| ارسال بهدلیل بار بیشازحد ناوگان رد شده است | model.vehicles[] یا shipments[].timeWindows |
افزودن خودرو یا کاهش دادن پنجرههای زمانی | اگر تعداد محمولهها برای ناوگان فعلی خیلی زیاد است، بهویژه در ساعات اوج مصرف، وسایل نقلیه بیشتری اضافه کنید یا پنجرههای تحویل را گسترش دهید تا حجم کار توزیع شود. |
| مسیرها خیلی طولانی یا ناکارآمد هستند | vehicles[].costPerKilometer از costPerHour |
افزودن هزینهها یا افزایش مقدار آنها | به میانای برنامهسازی کاربردی میگوید که سفر گران است و آن را تشویق میکند تا توقفهای دور و جداافتاده را حذف کند تا مسیرهای فشردهتری برای ناوگان ایجاد شود. |
| شیفتهای راننده خیلی طولانی است | vehicles[].routeDurationLimit یا model.vehicles[] |
افزودن محدودیتهای مدت، یا افزودن خودروها و محدودیتها | محدودیت سختی (مثلاً ۸ ساعت) برای کل زمانی که راننده در جاده میگذراند اعمال میکند. افزودن وسایل نقلیه بهتنهایی مسیرها را کوتاه نمیکند، مگراینکه محدودیتهای مدتزمان را نیز اعمال کنید تا حلکننده مجبور شود حجم کار را در ناوگان بزرگتر توزیع کند. |
بهروزرسانی طرح مسیر
اغلب لازم است طرح مسیر را بهروز کنید و درعینحال پایه را یکسان نگه دارید، مثلاً افزودن تحویل به برنامه راننده فعال. برای انجام این کار، از پارامترهای تزریق استفاده کنید که براساس راهحل قبلی شما، نقطهشروعی برای میانای برنامهسازی کاربردی فراهم میکند و به آن اجازه میدهد طرح موجود را بهجای محاسبه طرحی جدید از ابتدا، اصلاح کند.
در زیر روشهای مختلفی برای بهروزرسانی طرح مسیر با پارامترهای تزریق آورده شده است:
- مسیرها را از پاسخ قبلی به فیلد
injectedFirstSolutionRoutesدرخواست جدیدتان منتقل کنید. این کار سرعت جستجوی بهینهسازی را افزایش میدهد و برای برنامهریزی مجدد قبلاز شروع عملیات روزانه، مانند ادغام محمولههای لحظه آخری، مفید است. - میزان تغییر را بااستفاده از فیلد
injectedSolutionConstraintکنترل کنید. این کار زمانی مفید است که عملیات ازقبل درحال انجام باشد و به شما امکان میدهد ترتیب فعلی راننده را حفظ کنید یا بخشهایی از طرح را که ازقبل اجرا شده است اصلاح کنید. - با تنظیم
interpretInjectedSolutionsUsingLabelsرویtrue، مطمئن شوید که مسیر بهروزشده همچنان به خودرو صحیح اختصاص داده شده است. این ویژگی هنگام آزمایش برای افزودن یا حذف محمولهها و وسایل نقلیه مفید است، زیرا مسیرها را بااستفاده از برچسبها بهجای شاخصها مطابقت میدهد. این کار مستلزم آن است که همه برچسبهای خودرو و محموله یکتا باشند.
ادغام کردن برنامه مسیر
طرح مسیر نهاییشده شما یک شیء داده است که نشاندهنده مدیریت بهینهشده منابع و تکالیف شما است، درحالیکه از محدودیتها و اهداف شما پیروی میکند. با ادغام این طرح مسیر در سیستم خود، از آن در عملیات روزانه استفاده کنید. این کار معمولاً شامل تجسم طرح مسیر شما برای مدیران ناوگان و ارسال دستورالعملهای گامبهگام به رانندگان است.
نمایش تصویری
برای اینکه مدیران ناوگان بتوانند طرح مسیر شما را تأیید و نظارت کنند، میتوانید طرح مسیرتان را به روشهای زیر تجسم کنید:
برای اینکه مدیران ناوگان بتوانند طرح مسیرتان را تأیید و نظارت کنند، میتوانید آن را در نقشه داشبورد نمایش دهید. بسته به مرحله توسعه فعلیتان، میتوانید طرح مسیرتان را به روشهای زیر تجسم کنید:
- کاوش بدون کد: میتوانید از برنامه Route Optimization متنباز استفاده کنید تا ببینید API چگونه دادههای شما را به مسیرهای فیزیکی روی نقشه ترجمه میکند. این برنامه وب بهعنوان ابزاری اکتشافی عمل میکند که به شما امکان میدهد سناریوها را بسازید، پارامترهای محدودیت را تنظیم کنید، و طرحهای مسیر حاصل را قبلاز نوشتن هرگونه کد بهصورت دیداری ارائه دهید.
- نمایش ترتیب بازدید: میتوانید توالی بازدیدها را بهصورت نقاط شمارهگذاریشده روی نقشه نشان دهید تا طرحهای بهینهسازی و اعزام را در سیستم خودتان ارزیابی کنید. برای انجام این کار، آرایه
visitsرا در هر مسیر پاسخ میانای برنامهسازی کاربردی پیدا کنید. موارد موجود در این آرایه دقیقاً به همان ترتیبی است که راننده باید آنها را اجرا کند. میتوانید این فهرست را تکرار کنید، ازshipmentIndexبرای بازیابی مختصات مکان هر ایستگاه استفاده کنید، و از کتابخانه نقشهبرداریتان برای ارائه نشانگرهای شمارهگذاریشده روی نقشه براساس ترتیب آنها در فهرست استفاده کنید. - ترسیم مسیر فیزیکی: میتوانید مسیر برنامهریزیشده دقیق را روی نقشه تجسم کنید
تا متوجه شوید چرا بهینهساز توالی خاصی را انتخاب کرده است. این چندخطی نشاندهنده مسیر موردنظر برای برنامهریزی و ارزیابی است، نه مسیر همزمان طیشده توسط راننده.
populatePolylines: trueرا در درخواستتان تنظیم کنید تا فیلدencodedPolylineرا برای هر مسیر دریافت کنید و آن را بااستفاده از روشgoogle.maps.geometry.encoding.decodePath()از Maps JavaScript API رمزگشایی کنید.
ارسال به رانندگان
میتوانید بااستفاده از Navigation SDK، ناوبری گامبهگام را در برنامه راننده خود ادغام کنید یا پیوندهای عمیق به برنامه مصرفکننده Google Maps ارائه دهید.
- کیت توسعه نرمافزار پیمایش: اگر برنامه راننده سفارشی دارید، میتوانید
کیت توسعه نرمافزار پیمایش برای Android یا
iOS را برای راهنمایی گامبهگام درونبرنامه ادغام کنید.
میتوانید اطلاعات تکلیف را از پاسخ میانای برنامهسازی کاربردی در سیستم خود ادغام کنید
و از کیت توسعه نرمافزار برای پیمایش استفاده کنید. برای ارسال مسیرها از پاسخ میانای برنامهسازی کاربردی به
کیت توسعه نرمافزار،
populateTransitionPolylines: trueرا در درخواستتان تنظیم کنید. این کار یکrouteTokenبرای هر انتقال در پاسخ تولید میکند. - Fleet Engine: برای مدیریت پیشرفته ناوگان، میتوانید طرح مسیر تولیدشده توسط میانای برنامهسازی کاربردی را به Fleet Engine وارد کنید تا اجرای مسیر را در زمان واقعی پایش کنید. درحالیکه API یک چندخطی از مسیر موردنظر برای ارزیابی ارائه میدهد، Fleet Engine توالی برنامهریزیشده بازدیدهای شما را با ردیابی زنده خودرو جفت میکند.