متن کامل آگهی:
سلام
سلام وقتتون بخیر باشه من یک پروژه ی شبیه سازی دارم که از روی یک مقاله قراره انجام بشه تو بخش نرم افزار arena میخواستم ازتون کمک بگیرم که برام انجامش بدین اگر مایل هستید مقاله را براتون بفرستم
import random
import math
# -----------------------
# تعریف پارامترهای مسئله
# -----------------------
resources = {"doctors": 4, "paramedics": 4, "drivers": 4, "ambulances": 4, "medical\_cars": 4, "telemedicine": 4}
# اولویتها با وزندهی بیشتر برای اولویتهای خاص
priorities = {
1: 0.02, # 40% درخواستها در اولویت 1
2: 0.15, # 10% درخواستها در اولویت 2
3: 0.25, # 10% درخواستها در اولویت 3
4: 0.25, # 20% درخواستها در اولویت 4
5: 0.25, # 10% درخواستها در اولویت 5
6: 0.08 # 10% درخواستها در اولویت 6 (بیماران Telemedicine)
}
# مناطق جغرافیایی و زمان حمل و نقل (به دقیقه)
areas = {1: 15, 2: 20, 3: 25, 4: 30}
# تعداد شیفتها
shifts = 2
# -----------------------
# تابع هزینه
# -----------------------
def calculate\_cost(solution):
"""
محاسبه تخصیص منابع و زمان انتظار برای هر بیمار به صورت جداگانه.
:param solution: تخصیص منابع به درخواستها.
:return: مجموع زمان انتظار برای هر بیمار.
"""
patient\_times = {} # ذخیره اطلاعات تخصیص منابع و زمان انتظار برای هر بیمار
for priority, percentage in priorities.items():
# تعداد درخواستهای تصادفی از هر اولویت برای هر شیفت
num\_requests = random.randint(5, 15) \* shifts # تعداد درخواستهای فرضی از هر اولویت
patient\_times\[priority\] = \[\]
for \_ in range(num\_requests):
# منابع تخصیصیافته به این بیمار
allocated\_resource = solution\[f"priority\_{priority}"\]
# زمان خدمات و زمان انتظار برای این بیمار
if priority == 6: # بیماران Telemedicine فقط به یک پزشک نیاز دارند
service\_time = 10 if allocated\_resource == 1 else float('inf')
elif allocated\_resource > 0:
# بیماران اولویت بالاتر زمان انتظار کمتری دارند (بیشترین به کمترین)
service\_time = (1 / allocated\_resource \* 10) \* (6 - priority)
else:
service\_time = float('inf') # جریمه برای تخصیص صفر منابع
# زمان حملونقل تصادفی از مناطق (برای اولویت 6 نیازی به حمل و نقل نیست)
transport\_time = 0 if priority == 6 else random.choice(list(areas.values()))
# زمان انتظار کل
waiting\_time = service\_time + transport\_time
patient\_times\[priority\].append(waiting\_time)
return patient\_times
# -----------------------
# الگوریتم Simulated Annealing
# -----------------------
def simulated\_annealing():
# پارامترهای الگوریتم
initial\_temperature = 10 # دمای اولیه
final\_temperature = 0.5 # دمای نهایی
alpha = 0.99995 # نرخ کاهش دما
total\_iterations = 38000 # تعداد کل تکرارها
# مقداردهی اولیه
current\_solution = {f"priority\_{p}": random.randint(1, 10) for p in priorities.keys()}
current\_solution\["priority\_6"\] = 1 # بیماران Telemedicine فقط به یک پزشک نیاز دارند
best\_solution = current\_solution.copy()
best\_cost = calculate\_cost(current\_solution)
temperature = initial\_temperature
iterations = 0
while temperature > final\_temperature and iterations < total\_iterations:
# تولید یک جواب همسایه
neighbor\_solution = current\_solution.copy()
# ایجاد تغییرات تصادفی در چند اولویت
for \_ in range(random.randint(1, 3)):
priority\_to\_change = random.choice(list(priorities.keys()))
if priority\_to\_change == 6:
continue # اولویت 6 تغییر نمیکند و ثابت میماند
neighbor\_solution\[f"priority\_{priority\_to\_change}"\] = max(
1, neighbor\_solution\[f"priority\_{priority\_to\_change}"\] + random.randint(-3, 3)
)
# محاسبه هزینه همسایه
neighbor\_cost = calculate\_cost(neighbor\_solution)
# قانون پذیرش
if sum(\[sum(times) for times in neighbor\_cost.values()\]) < sum(\[sum(times) for times in best\_cost.values()\]) or random.random() < math.exp((sum(\[sum(times) for times in best\_cost.values()\]) - sum(\[sum(times) for times in neighbor\_cost.values()\])) / temperature):
current\_solution = neighbor\_solution
best\_cost = neighbor\_cost
Salmasadat, \[1/7/2025 3:38 PM\]
# بهروزرسانی بهترین جواب
best\_solution = current\_solution
# کاهش دما
temperature \*= alpha
iterations += 1
# نمایش جزئیات پیشرفت
if iterations % 1000 == 0:
print(f"Iteration: {iterations}, Temperature: {temperature:.5f}, Current Best Cost: {sum(\[sum(times) for times in best\_cost.values()\]):.2f}")
return best\_solution, best\_cost
# -----------------------
# اجرای الگوریتم
# -----------------------
if name == "main":
best\_solution, best\_cost = simulated\_annealing()
print("Best Solution (Resource Allocation):", best\_solution)
for priority, times in best\_cost.items():
print(f"Priority {priority}: Total Requests = {len(times)}, Average Waiting Time = {sum(times)/len(times):.2f} minutes")