این صفحه چرخه عمر طرح مسیر را بااستفاده از Route Optimization API شرح میدهد، از شناسایی نیازهای مسیریابی شما شروع میشود و با طرح مسیر یکپارچه در سیستم شما پایان مییابد.
وقتی مراحل طرح مسیر را دنبال میکنید، میتوانید به اهداف زیر دست یابید:
- عملیات ناوگان خود را نگاشت کنید: ناوگان فیزیکی، محدودیتهای پیچیده، و اهداف کسبوکار خود را به کد برای API ترجمه کنید.
- بهینهسازی طرحهای مسیر برای کسبوکارتان: با نحوه پالایش طرح مسیرتان آشنا شوید تا بتوانید به اهدافتان برسید و عملیات روزانهتان را بهبود بخشید.
- استقرار در تولید: طرح مسیرتان را با گنجاندن آن در عملیات روزمرهتان پیادهسازی کنید.
نمودار زیر چرخه عمر طرح مسیر را نشان میدهد.
مرحله پیادهسازی طرح مسیر زمانی اتفاق میافتد که برای اولینبار 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[] |
افزودن محدودیتهای مدت، یا افزودن وسایل نقلیه و محدودیتها | محدودیت سختی (مثلاً ۸ ساعت) را برای کل زمانی که راننده در جاده میگذراند اعمال میکند. افزودن وسایل نقلیه بهتنهایی مسیرها را کوتاه نمیکند، مگراینکه محدودیتهای مدتزمان را نیز اعمال کنید تا حلکننده مجبور شود حجم کار را در ناوگان بزرگتر توزیع کند. |
بهروزرسانی طرح مسیر
اغلب لازم است طرح مسیر را بهروز کنید و درعینحال پایه را یکسان نگه دارید، مثلاً افزودن یک سوار کردن به برنامه زمانی راننده فعال. برای انجام این کار، از پارامترهای تزریق استفاده کنید که به میانای برنامهسازی کاربردی (API) نقطهشروعی براساس راهحل قبلی شما ارائه میدهد و به آن اجازه میدهد طرح موجود را بهجای محاسبه طرح جدید از ابتدا، اصلاح کند.
در زیر روشهای مختلفی برای بهروزرسانی طرح مسیر با پارامترهای تزریق آورده شده است:
- مسیرها را از پاسخ قبلی به فیلد
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 توالی برنامهریزیشده بازدیدهای شما را با ردیابی زنده خودرو جفت میکند.