برای نشان دادن توانایی الگوریتم های ژنتیک برای یافتن راه حل های خلاقانه
توجه ویراستاران Towards Data Science: در حالی که ما به نویسندگان مستقل اجازه می دهیم مقالاتی را مطابق با قوانین و دستورالعمل های ما منتشر کنند، اما سهم هر نویسنده را تأیید نمی کنیم. شما نباید بدون مشورت حرفه ای به آثار نویسنده اعتماد کنید. برای جزئیات بیشتر به شرایط Reader ما مراجعه کنید.
الگوریتم های ژنتیک اغلب نادیده گرفته می شوند، به عنوان یکی دیگر از الگوریتم های یادگیری بدون نظارت که نمی تواند به طور موثر همگرا شود. این تا حدی درست است، زیرا الگوریتم های ژنتیک از مشتقات جزئی استفاده نمی کنند و بنابراین الگوریتم آموزشی کمتر مستقیم است. با این حال، الگوریتم های ژنتیک با استفاده از بهینه سازی سنتی مبتنی بر گرادیان، امکان فرمول بندی راه حل هایی را فراهم می کنند که غیرممکن بود.
چرا اینطور است؟اگر مدل مبتنی بر شیب نزول در حداقل محلی شروع شود، برای همیشه گیر می کند، زیرا گرادیان نقاط در هر طرف بیشتر می شود. با این حال، به دلیل ماهیت تصادفی تر الگوریتم های ژنتیک، در نهایت راه حل را پیدا می کند.
علاوه بر این، شبکه های عصبی به داده های برچسب دار با توابع از دست دادن به خوبی تعریف شده نیاز دارند. الگوریتم های ژنتیک فقط به داده ها نیاز دارند و یک تابع از دست دادن سفارشی (که اغلب تابع تناسب الگوریتم های ژنتیک نامیده می شود) می تواند هوشمندانه برای بهینه سازی ویژگی های خاص ساخته شود. این انعطاف پذیری باعث می شود که الگوریتم ژنتیک از بقیه الگوریتم های بدون نظارت متمایز شود.
الگوریتم های ژنتیک چگونه کار می کنند؟
الگوریتم های ژنتیک نوعی حمله از نوع brute-force به مشکل هستند. تنها تفاوت استفاده از مفهوم تکامل برای سرعت بخشیدن به فرآیند است. در اینجا نحوه عملکرد الگوریتم ژنتیک آمده است:
- یک عامل ایجاد می شود. این شامل مجموعه ای از وزن ها است که با شبکه عصبی سازگار است.
- ارزش تناسب عامل محاسبه می شود
- این کار را چندین بار تکرار کنید تا زمانی که "جمعیت" نمایندگانی داشته باشید
- جمعیت را بر اساس تناسب اندامشان مرتب کنید و نمایندگانی که بهترین تناسب اندام را دارند در بالای لیست قرار دارند.
- عوامل برتر را با هم "پرورش دهید".
- این کار را تا رسیدن به مقدار رضایت رضایت بخش تکرار کنید.
با تغییر تابع تناسب و داده های ورودی، الگوریتم ژنتیک را می توان به معنای واقعی کلمه برای هر مشکلی اعمال کرد!
زمانی که یک الگوریتم ژنتیک نباید استفاده شود:
برای کارهای ابتدایی مانند رگرسیون و طبقه بندی، یک شبکه عصبی عمیق که با استفاده از یک بهینه ساز مبتنی بر گرادیان آموزش داده شده است، همیشه سریعتر از الگوریتم ژنتیک همگرا می شود.
الگوریتم ژنتیکی برای یافتن الگوهای مناسب نیست ، بلکه داشتن دامنه گسترده ای از دیدگاه ، برای یافتن راه حل هایی که در نظر گرفته نشده است.
استفاده از الگوریتم های ژنتیکی در تجارت سهام:
معاملات سهام پیچیده است ، زیرا سر و صدای منابع مختلف الگوی واقعی پشت داده ها را رقیق می کند. استفاده از یک الگوریتم ژنتیکی مانند گرفتن میانبر در همه اینها است. صرفه جویی در تشخیص الگوی و تجزیه و تحلیل پیچیده. این به سادگی استراتژی های مختلف را آزمایش می کند و بهترین استراتژی را برای تجارت امنیت می یابد. اگر یک الگوریتم ژنتیکی نتواند راه حل خوبی پیدا کند ، این فقط می تواند یک (یا هر دو!) از این دو دلیل باشد:
- الگوریتم ژنتیکی برای مدت زمان طولانی آموزش دیده نشده است
الگوریتم ژنتیکی ، به عنوان یک الگوریتم با نیروی بی رحمانه ، برای محدود کردن نتایج به یک دوره طولانی نیاز دارد. این یک مانع بزرگ برای غلبه بر آن است ، زیرا برای غلبه بر این مشکل باید قدرت محاسباتی بسیار زیاد باشد
2. عملکرد از دست دادن معیوب است
این بسیار رایج تر است. عملکرد ضرر که شبکه را ارزیابی می کند ، هدف عملکرد ضرر را محاصره نمی کند.
کد:
سلب مسئولیت: این کد از کد در اینجا اقتباس شده است تا آن را برای بهینه سازی شبکه های عصبی که استراتژی های معاملاتی ایجاد می کنند ، سازگار باشد.
مرحله 1 |پیش نیازها:
اینها اساسی ترین وابستگی های پروژه است. برای بهتر شدن فرایند یادگیری ، می توانید عملکردهای فعال سازی بیشتری را برای مجموعه داده های مناسب خود اضافه کنید.
مرحله 2 |نماینده:
هر عامل مجموعه ای از وزن های خاص خود را دارد که به طور تصادفی با معماری تنظیم شبکه عصبی تولید می شود. شبکه استدلال لیستی است که به نظر می رسد:
هر اصطلاح در لیست ، یک لایه در شبکه عصبی را توصیف می کند. اصطلاح اول در هر لیست تو در تو ، تعداد نورونهای ورودی برای لایه ، اصطلاح دوم خروجی و سوم عملکرد فعال سازی است که برای لایه اعمال می شود.
مرحله 3 |تولید عوامل:
این برای تولید عوامل استفاده می شود ، همانطور که در مرحله 1 روش برای اجرای یک الگوریتم ژنتیکی به تفصیل ارائه شده است.
مرحله 4 |محاسبه تناسب اندام:
این عملکرد تناسب اندام یک شبیه سازی معاملاتی است که از داده های گذشته برای محاسبه سود مدل استفاده می کند. هر نماینده با تهیه یک مقدار سیگموئید ، لیستی از معاملات را تولید می کند. این مقادیر سپس به نزدیکترین مقدار گرد می شوند. اگر این مقدار 0 باشد ، شبیه سازی سهام را به فروش می رساند. اگر این مقدار 1 باشد ، شبیه سازی سهام را خریداری می کند.
سپس با مقایسه بهترین تجارت ممکن با تجارت واقعی ، سود را محاسبه می کند.
مرحله 5 |انتخاب نماینده:
این کد اساساً عوامل را بر اساس ارزش تناسب آنها، از کمترین مقدار به بالاترین، مرتب می کند. به خاطر داشته باشید که هرچه ارزش تناسب اندام کمتر باشد، بهتر است. سپس لیست نمایندگان را تنها به 20٪ از نمایندگان کوتاه می کند.
مرحله 6|متقاطع نماینده:
این پیچیده ترین بخش برنامه است. در فرآیند متقاطع دو والد تصادفی از بین عوامل انتخاب شده انتخاب می شوند. لیست تودرتو از وزن ها به یک لیست طولانی کاهش می یابد. یک نقطه تقسیم به طور تصادفی انتخاب می شود. این تعیین می کند که کودک از چه مقدار از وزن هر یک از والدین تشکیل شده است. سپس وزنه های این کودک دوباره فرمت می شود و کودک به لیست عوامل اضافه می شود.
مرحله 7|جهش:
الگوریتم های ژنتیک از نظر فنی «کور» هستند، زیرا هیچ بینشی نسبت به ظاهر سطح رسم شده توسط تابع از دست دادن ندارند. این بدان معناست که گیرکردن الگوریتم ژنتیک در یک نقطه خاص بسیار آسان است. جهش به تغییرات جزئی، تصادفی و غیر مکرر اجازه می دهد تا دیگ را به هم بزند و سیستم را از حداقل های محلی خارج کند.
مرحله 8|اجرای برنامه:
برای اجرای برنامه به داده نیاز داریم. به دلایلی، گواهی SSL به من اجازه نمی دهد اطلاعات مالی را از yfinance یا alphavantage دریافت کنم. من نتوانستم این برنامه را اجرا کنم، بنابراین فقط از آرایه های تصادفی numpy به عنوان داده استفاده کردم.
اگر می خواهید از داده های مالی خود استفاده کنید، مفهوم آن این است که آرایه ای از داده های قیمت بسته شدن آن را به تکه هایی با اندازه n تقسیم کنید.
برای تکرارپذیری، این برنامه دانه خود را تنظیم می کند و تصادفی بودن را ثابت می کند. این به منظور کاهش تصادفی بودن، امکان تغییر پارامترهایی مانند اندازه جمعیت، دوره ها و معماری شبکه عصبی است. پارامتر جالب تر در اینجا طول هر تکه داده ای است که باید به شبکه تغذیه شود. تغییر دادن این پارامتر زمان بهینه ای را که برنامه در آن کار می کند پیدا می کند.
نتیجه:
همانطور که در بسیاری از مقالات دیگر خودم گفته ام، این صرفا چارچوبی است برای آنچه که می توان با این مفهوم انجام داد. کارهای بی شماری وجود دارد که می توانید برای بهبود برنامه من انجام دهید. در اینجا تعداد کمی از آنها هستند:
- ضبط نسل از عوامل گذشته
با ضبط نسل عامل های گذشته، برنامه از بازسازی عواملی که قبلا تولید شده اند جلوگیری می کند.
2. برنامه را به یک حساب معاملاتی کاغذی پیوند دهید
آلپاکا انتخاب واضحی برای استفاده از سبد معاملات کاغذی است. می تواند معاملات را به سرعت انجام دهد و امکان تجزیه و تحلیل آسان عملکرد برنامه را فراهم می کند.
3. انواع تجارت بیشتری ایجاد کنید
این سخت ترین از این سه است. معاملات مختلف مانند استاپ ضرر را اضافه کنید و معاملات خرید و فروش را اضافه کنید، تا استراتژی های معاملاتی بسیار ظریف تر و لایه ای تر، لایه بندی انواع مختلف معاملات بر روی یکدیگر، برای به حداکثر رساندن سود، امکان پذیر باشد.
آموزش فارکس برای مبتدی ها...
ما را در سایت آموزش فارکس برای مبتدی ها دنبال می کنید
برچسب :
نویسنده : Mihayloo
بازدید : <-PostHit->
تاريخ : سه
شنبه
18 بهمن
1401 ساعت: 14:11