سرب الذكاء في بيثون
(الخوارزمية الجينية، تحسين سرب الجسيمات، محاكاة التلدين، خوارزمية مستعمرة النمل، الخوارزمية المناعية، خوارزمية سرب الأسماك الاصطناعية في بايثون)
الوثائق: https://scikit-opt.github.io/scikit-opt/#/en/
الرابط: https://scikit-opt.github.io/scikit-opt/#/zh/
كود المصدر: https://github.com/guofei9987/scikit-opt
ساعدنا على تحسين scikit-opt https://www.wjx.cn/jq/50964691.aspx
تثبيت النقطة scikit-opt
لإصدار المطور الحالي:
git clone [email protected]:guofei9987/scikit-opt.git
cd scikit-opt
pip install .
UDF (وظيفة يحددها المستخدم) متاحة الآن!
على سبيل المثال، لقد قمت للتو بإعداد نوع جديد من وظيفة selection
.
الآن، وظيفة selection
الخاصة بك هي مثل هذا:
-> الكود التجريبي: example/demo_ga_udf.py#s1
# الخطوة 1: تحديد عامل التشغيل الخاص بك:def التحديد_tournament(algorithm, Tourn_size):FitV =خوارزمية.FitVsel_index = []for i in range(algorithm.size_pop):aspirants_index = np.random.choice(range(algorithm.size_pop), size =tourn_size)sel_index.append(max(aspirants_index, key=lambda i: FitV[i]))algorithm.Chrom =خوارزمية.Chrom[sel_index, :] # خوارزمية إرجاع الجيل التالي.Chrom
استيراد وبناء الجا
-> الكود التجريبي: example/demo_ga_udf.py#s2
استيراد numpy كـ npfrom sko.GA import GA, GA_TSPdemo_func = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + (x[2] - 0.5) ** 2ga = GA(func =demo_func، n_dim=3، size_pop=100، max_iter=500، prob_mut=0.001,lb=[-1, -10, -5], ub=[2, 10, 2], الدقة=[1e-7, 1e-7, 1])
قم بتسجيل udf الخاص بك في GA
-> الكود التجريبي: example/demo_ga_udf.py#s3
ga.register(operator_name='selection',operator=selection_tournament, Tourn_size=3)
يوفر scikit-opt أيضًا بعض المشغلين
-> الكود التجريبي: example/demo_ga_udf.py#s4
من sko.operators، قم باستيراد الترتيب، والاختيار، والتقاطع، وmutarga.register(operator_name='ranking',operator=ranking.ranking). تسجيل (اسم_المشغل='كروس أوفر'، عامل التشغيل=كروس أوفر_2بوينت). تسجيل (اسم_المشغل='الطفرة'، عامل التشغيل=mutation.mutation)
الآن قم بإجراء GA كالمعتاد
-> الكود التجريبي: example/demo_ga_udf.py#s5
best_x, best_y = ga.run()print('best_x:', best_x, 'n', 'best_y:', best_y)
حتى الآن، يوفر udf surport
crossover
،mutation
،selection
،ranking
GA scikit-opt عشرات من المشغلين، انظر هنا
للمستخدمين المتقدمين:
-> الكود التجريبي: example/demo_ga_udf.py#s6
فئة MyGA(GA): تحديد التحديد (self, Tourn_size=3):FitV = self.FitVsel_index = []لـ i في النطاق (self.size_pop):aspirants_index = np.random.choice(range(self.size_pop)، الحجم =tourn_size)sel_index.append(max(aspirants_index, key=lambda i: FitV[i]))self.Chrom = self.Chrom[sel_index, :] # الجيل القادمreturn self.Chromranking = Ranking.rankingdemo_func = lambda x: x[0] ** 2 + (x[1] - 0.05) ** 2 + (x[2] - 0.5) ** 2my_ga = MyGA(func=demo_func, n_dim=3, size_pop=100, max_iter=500, lb=[-1, -10, -5], ub=[2, 10, 2], الدقة=[1e-7, 1e-7, 1])best_x, best_y = my_ga.run()print('best_x :'، best_x، 'n'، 'best_y:'، best_y)
(جديد في الإصدار 0.3.6)
قم بتشغيل خوارزمية لمدة 10 تكرارات، ثم قم بتشغيل 20 تكرارًا أخرى على أساس التكرارات العشرة قبل:
من sko.GA استيراد GAfunc = lambda x: x[0] ** 2ga = GA(func=func, n_dim=1)ga.run(10)ga.run(20)
ناقلات
تعدد المواضيع
المعالجة المتعددة
مخبأة
راجع https://github.com/guofei9987/scikit-opt/blob/master/examples/example_function_modes.py
نحن نعمل على تطوير حساب GPU، والذي سيكون مستقرًا في الإصدار 1.0.0
مثال متاح بالفعل: https://github.com/guofei9987/scikit-opt/blob/master/examples/demo_ga_gpu.py
الخطوة 1 : تحديد مشكلتك
-> الكود التجريبي: example/demo_de.py#s1
'''دقيقة f(x1, x2, x3) = x1^2 + x2^2 + x3^2s.t. x1*x2 >= 1 x1*x2 <= 5 x2 + x3 = 1 0 <= x1, x2, x3 <= 5''def obj_func(p):x1, x2, x3 = preturn x1 ** 2 + x2 ** 2 + x3 ** 2constraint_eq = [لامدا س: 1 - س[1] - س[2] ]constraint_ueq = [لامدا x: 1 - x[0] * x[1],لامدا x: x[0] * x[1] - 5]
الخطوة 2 : القيام بالتطور التفاضلي
-> الكود التجريبي: example/demo_de.py#s2
من sko.DE استيراد DEde = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],constraint_eq=constraint_eq, constraint_ueq =constraint_ueq)best_x, best_y = de.run()print('best_x:', best_x, 'n', 'best_y:', best_y)
الخطوة 1 : تحديد مشكلتك
-> الكود التجريبي: example/demo_ga.py#s1
import numpy as npdef schaffer(p):''' تحتوي هذه الوظيفة على الكثير من الحد الأدنى المحلي، مع حد أدنى عالمي للصدمات القوية عند (0,0) بقيمة 0 https://en.wikipedia.org/wiki/Test_functions_for_optimization ''' x1, x2 = ppart1 = np.square(x1) - np.square(x2)part2 = np.square(x1) + np.square(x2)return 0.5 + (np.square(np.sin(part1)) - 0.5) / np.square(1 + 0.001 * Part2)
الخطوة 2 : القيام بالخوارزمية الجينية
-> الكود التجريبي: example/demo_ga.py#s2
من sko.GA استيراد GAga = GA(func=schaffer, n_dim=2, size_pop=50, max_iter=800, prob_mut=0.001, lb=[-1, -1], ub=[1, 1], الدقة=1e -7)best_x, best_y = ga.run()print('best_x:', best_x, 'n', 'best_y:'، best_y)
-> الكود التجريبي: example/demo_ga.py#s3
استيراد الباندا كـ pdimport matplotlib.pyplot كـ pltY_history = pd.DataFrame(ga.all_history_Y)fig, ax = plt.subplots(2, 1)ax[0].plot(Y_history.index, Y_history.values, '.', color='red')Y_history.min(axis=1).cummin().plot(kind='line')plt.show()
ما عليك سوى استيراد GA_TSP
، فهو يؤدي إلى زيادة تحميل mutation
crossover
لحل مشكلة TSP
الخطوة 1 : تحديد مشكلتك. قم بإعداد إحداثيات النقاط الخاصة بك ومصفوفة المسافة.
أقوم هنا بإنشاء البيانات بشكل عشوائي كعرض توضيحي:
-> الكود التجريبي: example/demo_ga_tsp.py#s1
استيراد numpy كـ npfrom scipy استيراد spatialimport matplotlib.pyplot كـ pltnum_points = 50points_coinate = np.random.rand(num_points, 2) # إنشاء إحداثيات للنقاطdistance_matrix = spatial.distance.cdist(points_coinate, Points_coinate, metric='euclidean')def cal_total_distance(routine):'''الوظيفة الموضوعية. روتين الإدخال، وإرجاع المسافة الإجمالية. cal_total_distance(np.arange(num_points)) '''num_points, = Routine.shapereturn sum([distance_matrix[روتين[i % num_points], روتين[(i + 1) % num_points]] لـ i في النطاق(num_points)])
الخطوة 2 : قم بعمل GA
-> الكود التجريبي: example/demo_ga_tsp.py#s2
من sko.GA استيراد GA_TSPga_tsp = GA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=50, max_iter=500, prob_mut=1)best_points, best_distance = ga_tsp.run()
الخطوة 3 : رسم النتيجة:
-> الكود التجريبي: example/demo_ga_tsp.py#s3
الشكل، الفأس = plt.subplots(1, 2)best_points_ = np.concatenate([best_points, [best_points[0]]])best_points_coinate = point_coinate[best_points_, :]ax[0].plot(best_points_coinate[:, 0] ، أفضل_نقاط_تنسيق[:، 1]، 'أو')ax[1].plot(ga_tsp.generation_best_Y)plt.show()
الخطوة 1 : تحديد مشكلتك:
-> الكود التجريبي: example/demo_pso.py#s1
مواطنة demo_func(x):x1, x2, x3 = xreturn x1 ** 2 + (x2 - 0.05) ** 2 + x3 ** 2
الخطوة 2 : قم بعمل PSO
-> الكود التجريبي: example/demo_pso.py#s2
من sko.PSO استيراد PSOpso = PSO(func=demo_func, n_dim=3, pop=40, max_iter=150, lb=[0, -1, 0.5], ub=[1, 1, 1], w=0.8, c1=0.5, c2=0.5)pso.run()print('best_x هو', pso.gbest_x, "best_y هو"، pso.gbest_y)
الخطوة 3 : ارسم النتيجة
-> الكود التجريبي: example/demo_pso.py#s3
استيراد matplotlib.pyplot كـ pltplt.plot(pso.gbest_y_hist)plt.show()
إذا كنت بحاجة إلى قيد غير خطي مثل (x[0] - 1) ** 2 + (x[1] - 0) ** 2 - 0.5 ** 2<=0
الرموز هي مثل هذا:
constraint_ueq = (لامدا س: (x[0] - 1) ** 2 + (x[1] - 0) ** 2 - 0.5 ** 2, )pso = PSO(func=demo_func, n_dim=2, pop=40, max_iter=max_iter, lb=[-2, -2], ub=[2, 2] ، constraint_ueq=constraint_ueq)
لاحظ أنه يمكنك إضافة أكثر من قيد غير خطي. فقط قم بإضافته إلى constraint_ueq
علاوة على ذلك، لدينا رسم متحرك:
↑ انظر الأمثلة/demo_pso_ani.py
الخطوة 1 : تحديد مشكلتك
-> الكود التجريبي: example/demo_sa.py#s1
demo_func = لامدا س: x[0] ** 2 + (x[1] - 0.05) ** 2 + x[2] ** 2
الخطوة 2 : افعل SA
-> الكود التجريبي: example/demo_sa.py#s2
من sko.SA import SAsa = SA(func=demo_func, x0=[1, 1, 1], T_max=1, T_min=1e-9, L=300, max_stay_counter=150)best_x, best_y = sa.run() طباعة ('best_x:'، best_x، 'best_y'، best_y)
الخطوة 3 : ارسم النتيجة
-> الكود التجريبي: example/demo_sa.py#s3
استيراد matplotlib.pyplot كـ pltimport pandas كـ pdplt.plot(pd.DataFrame(sa.best_y_history).cummin(axis=0))plt.show()
علاوة على ذلك، توفر scikit-opt 3 أنواع من التلدين المحاكى: سريع، بولتزمان، كوشي. رؤية المزيد سا
الخطوة 1 : أوه، نعم، حدد مشاكلك. مملة لنسخ هذه الخطوة.
الخطوة 2 : افعل SA لـ TSP
-> الكود التجريبي: example/demo_sa_tsp.py#s2
من sko.SA استيراد SA_TSPsa_tsp = SA_TSP(func=cal_total_distance, x0=range(num_points), T_max=100, T_min=1, L=10 * num_points)best_points, best_distance = sa_tsp.run()print(best_points, best_distance, cal_total_distance (best_points))
الخطوة 3 : رسم النتيجة
-> الكود التجريبي: example/demo_sa_tsp.py#s3
من matplotlib.ticker import FormatStrFormatterfig، ax = plt.subplots(1, 2)best_points_ = np.concatenate([best_points, [best_points[0]]])best_points_coinate = point_coinate[best_points_, :]ax[0].plot(sa_tsp.best_y_history)ax[0].set_xlabel("Iteration")ax[0].set_ylabel("Distance")ax[1].plot(best_points_coinate[:, 0], best_points_coinate [:، 1]، علامة = 'س'، علامة وجه اللون = 'ب'، اللون = 'ج'، linestyle='-')ax[1].xaxis.set_major_formatter(FormatStrFormatter('%.3f'))ax[1].yaxis.set_major_formatter(FormatStrFormatter('%.3f'))ax[1].set_xlabel(" خط الطول")ax[1].set_ylabel("Latitude")plt.show()
المزيد: رسم الرسوم المتحركة:
↑ انظر الأمثلة/demo_sa_tsp.py
-> الكود التجريبي: example/demo_aca_tsp.py#s2
من sko.ACA استيراد ACA_TSPaca = ACA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=50, max_iter=200, distance_matrix=distance_matrix)best_x, best_y = aca.run()
-> الكود التجريبي: example/demo_ia.py#s2
من sko.IA استيراد IA_TSPia_tsp = IA_TSP(func=cal_total_distance, n_dim=num_points, size_pop=500, max_iter=800, prob_mut=0.2,T=0.7, alpha=0.95)best_points, best_distance = ia_tsp.run()print('best الروتين:', best_points, "المسافة الأفضل:"، المسافة الأفضل)
-> الكود التجريبي: example/demo_afsa.py#s1
Def func(x):x1, x2 = xreturn 1 / x1 ** 2 + x1 ** 2 + 1 / x2 ** 2 + x2 ** 2from sko.AFSA import AFSAafsa = AFSA(func, n_dim=2, size_pop= 50، max_iter=300، max_try_num=100، الخطوة=0.5، visual=0.3,q=0.98, delta=0.5)best_x, best_y = afsa.run()print(best_x, best_y)
يو، جيه، هي، واي، يان، كيو، وكانغ، إكس (2021). SpecView: إطار تصور طيف البرامج الضارة مع تحويل الطيف المفرد. معاملات IEEE في الطب الشرعي وأمن المعلومات، 16، 5093-5107.
Zhen, H., Zhai, H., Ma, W., Zhao, L., Weng, Y., Xu, Y., ... & He, X. (2021). تصميم واختبار مولد حل تدفق الطاقة الأمثل القائم على التعلم المعزز. تقارير الطاقة.
Heinrich, K., Zschech, P., Janiesch, C., & Bonin, M. (2021). خصائص بيانات العملية مهمة: تقديم الشبكات العصبية التلافيفية (GCNN) وشبكات الانتباه ذات القيمة الرئيسية (KVP) للتنبؤ بالحدث التالي من خلال التعلم العميق. نظم دعم القرار، 143، 113494.
تانغ، هونج كونج، وجوه، كورونا (2021). مُحسِّن ميتا إرشادي جديد غير قائم على السكان مستوحى من فلسفة يي جينغ. arXiv الطباعة المسبقة arXiv:2104.08564.
Wu, G., Li, L., Li, X., Chen, Y., Chen, Z., Qiao, B., ... & Xia, L. (2021). رسم بياني يتضمن مطابقة الأحداث الاجتماعية في الوقت الفعلي لتوصية EBSN. الشبكة العالمية، 1-22.
Pan, X., Zhang, Z., Zhang, H., Wen, Z., Ye, W., Yang, Y., ... & Zhao, X. (2021). تم تجهيز خوارزمية سريعة وقوية لتحديد الغازات المخلوطة وكشف التركيز بناءً على آلية الانتباه بشبكة عصبية متكررة مع وظيفة الخسارة المزدوجة. الحساسات والمحركات ب: كيميائي، 342، 129982.
كاستيلا بالسيل، م. (2021). تحسين نظام حفظ المحطة لتوربينات الرياح البحرية العائمة WindCrete.
Zhai, B., Wang, Y., Wang, W., & Wu, B. (2021). الإستراتيجية المثلى للتحكم في حدود السرعة المتغيرة على أجزاء الطريق السريع في ظل ظروف الضباب. arXiv الطباعة المسبقة arXiv:2107.14406.
ياب، XH (2021). التصنيف متعدد العلامات على البيانات الخطية محليًا: التطبيق على التنبؤ بالسمية الكيميائية.
جيبهارد، ل. (2021). تخطيط توسيع الشبكات ذات الجهد المنخفض باستخدام تحسين مستعمرة النمل Ausbauplanung von Niederspannungsnetzen mithilfe eines Ameisenalgorithmus.
Ma, X., Zhou, H., & Li, Z. (2021). التصميم الأمثل للترابط بين الهيدروجين وأنظمة الطاقة. معاملات IEEE على تطبيقات الصناعة.
دي كورسو، TDC (2021). دراسة نموذج يوهانسن-ليدويت-سورنيت من كبار الماليين.
Wu, T., Liu, J., Liu, J., Huang, Z., Wu, H., Zhang, C., ... & Zhang, G. (2021). إطار عمل جديد قائم على الذكاء الاصطناعي لتخطيط المسار الأمثل لـ AoI في شبكات الاستشعار اللاسلكية بمساعدة الطائرات بدون طيار. معاملات IEEE على الاتصالات اللاسلكية.
ليو، إتش، وين، زي، وكاي، دبليو (2021، أغسطس). FastPSO: نحو خوارزمية ذكاء السرب الفعالة على وحدات معالجة الرسومات. في المؤتمر الدولي الخمسين للمعالجة الموازية (الصفحات 1-10).
محبوب، ر. (2020). الخوارزميات وتقنيات التحسين لحل TSP.
لي، جيه، تشن، تي، ليم، كيه، تشين، إل، خان، إس إيه، شيه، جيه، ووانغ، إكس (2019). أدى التعلم العميق إلى تسريع عملية تصنيع الكتلة النانوية الذهبية. الأنظمة الذكية المتقدمة، 1(3)، 1900029.