بخشی از پاورپوینت
اسلاید 1 :
پیتزا پایلی
اسلاید 2 :
توضیح
پیتزا رباتیک یک شرکت نوپای پیتزا هست که در آن پیتزاها توسط ربات تحویل داده میشه و این مشتریها هستند که قیمت را انتخاب میکنند.
اسلاید 3 :
شیوه کار
هر مشتری پیتزای دلخواهش را به هر قیمتی که میخواهد سفارش میدهد. پیتزا رباتیک میتونه هر کدام را که خواست قبول یا رد کنه. اما آنهایی که پذیرفت را باید تا یک مدت زمان مشخص تحویل دهد.
پیتزا رباتیک اگر هیچ سفارشی را قبول نکنه، هیچ سودی نمیکنه. از طرف دیگر، اگر همه سفارشها را قبول کنه به احتمال زیاد ضرر کلانی میکنه.
روبات فقط میتونه یه پیتزا ببره.
اسلاید 4 :
ورودی ها
ورودی
مختصاتی که میخواهد پیتزا ببرد بر حسب(x,y)
نکته: برای بدست آوردن فاصله ی مبدأ مختصات تا مقصد باید از قانون فیثاغورث استفاده کرد.
پولی که کاربر به او میدهد.(profit)
مقدار زمانی که روبات قادر به بردن پیتزا است.(max_total_time )
اسلاید 5 :
داده های موجود
داده
هزینه ای که برای رفتن هر متر نیاز دارد.
هر متر ۰.۰0۱ (cost_meter )
سرعت ربات برای طی کردن مسافت.
هر 500 متر را در یک ثانیه میرود.(speed)
اسلاید 6 :
خروجی های مورد نیاز
خروجی
زمان مصرف شده.(actual_total_time )
فهرست کسانی که باید برای آن ها پییتزا برد با مکان آن ها(accepted_orders_id )
سود بدست آمده(total_net_profit )
اسلاید 7 :
پردازش ها
با قانون فیثاغورث فاصله مبدأ تا مقصد را بدست آورده و آن را در دو ضرب میکنیم زیرا روبات باید هم فاصله را برود وهم باز گردد.
2. فاصله ی بدست آمده را در 0.001 ضرب میکنیم زیرا هر 1 متر که روبات میرود 0.001 هزینه دارد.
3. فاصله را بر 500 تقسیم می کنیم تا زمان رفتن ربات بر ثانیه بدست آید.
4.هزینه – پولی که کاربر میدهد = سود
5. سود را بر زمان تقسیم کرده تا بفهمیم ربات در هر ثانیه چقدر سود میکند .
6. برای همه ی مشتریان این کار را کرده و آن ها را ذخیره میکنیم.(می توان برای ذخیره ی هر یک ازdictاستفاده کرد.)
7.آن ها را بر حسب مرحله ی 5 مرتب میکنیم.( sorted(orders1,key=lambda k: k['p/t'],reverse=True) )
اسلاید 8 :
8.داده های قبلی را از اول پیمایش کرده اگر سود آن ها منفی نبود و همچنین زمان آن مناسب بود(یعنی هنوز انرژی برای رفتن آن مسافت داشته باشیم) سود و زمان و id آن را در متغیر هایی ذخیره کرده و همین طور تا آخر پیش میرویم(هر کدام را ذخیره میکنیم) .
9.حال یکبار دیگر از اول پیمایش کرده و هر بار یکی از آن ها را حساب نمی کنیم و آن هارا در متغیر هایی ذخیره می کنیم(مثلا خانه ی یکم را حساب نمی کنیم و با توجه به شروط مرحله ی 8 سود آن هارا جمع می کنیم بعد که تا آخر حساب کردیم خانه ی 2 را حساب نمی کنیم) .
10.بیشترین سود را محاسبه کرده و آن را نمایش میدهیم.
اسلاید 9 :
کد ها
import math
cost_meter=0.001
speed=500
case = "E1"
max_total_time = 30 # minute
orders = [{'id': 1, 'x': -1180, 'y': -1210, 'profit': 8.9}, {'id': 2, 'x': -2140, 'y': 1370, 'profit': 3.5}]
accepted_orders_id = []
actual_total_time = 0
total_net_profit = 0
orders1=[]
اسلاید 10 :
for i in orders:
c=math.sqrt(i['x']**2+i['y']**2)
distance=c+c
time=distance/speed
cost=distance*cost_meter
profit=i['profit']-cost
orders1.append({'id':i['id'],'profit':profit,'time':time,'p/t':profit/time})
orders1=sorted(orders1,key=lambda k: k['p/t'],reverse=True)
timer=0
timer1=0
tutal_profit=0
member=[]
t1=0
final_list=[]
اسلاید 11 :
for j in range(-1,len(orders1)):
for i in range(len(orders1)):
if not(j==i):
if not(orders1[i]['profit']<=0):
if (timer<=max_total_time):
timer+=orders1[i]['time']
if not(timer>max_total_time):
timer1+=orders1[i]['time']
t1=timer1
tutal_profit+=orders1[i]['profit']
member.append(orders1[i]['id'])
else:
timer-=orders1[i]['time']
final_list.append({'time':round(timer1,2),"tutalprofit":round(tutal_profit,2),"member":member})
timer1=0
timer=0
tutal_profit=0
member=[]
final_list=sorted(final_list,key=lambda k: k['tutal profit'],reverse=True)
print("#",case,final_list[0]['time'],final_list[0]['tutal profit'],final_list[0]['member'])
اسلاید 12 :
پایان