Knapsack Probleminin Python ile Döviz Alım-Satımına Uygulanışı

Standard

Merhaba;

Bu yıl “genetik algoritmalar” adında bir ders almaktayım. Ders içeriği itibariyle yaygın genetik algoritmaların tanıtmayı ve öğrencilere gruplar halinde bu algoritmaların uygulanmasını hedeflemekte. Biz de grup olarak knapsack algoritmasını seçerek kendimize bir konu belirledik ve uygulamaya başladık. İlk problemimiz kullanacağımız dildi. Zaten hiçbirimiz matlab düşünmedi. Grup 3 kişiden oluşuyordu ve diğer 2 arkadaş C# biliyorlardı. Bense hem C# hem de python biliyordum ancak hassas sayısal hesaplamaların python’da çok daha etkin şekilde yapıldığını bildiğimden python tercih etmekten yanaydım. arkadaşlar şöyle dediler “3’ümüzde C# biliyoruz, ama sadece sen python biliyorsun, kodu C# da yazalım, sen python ile bize güncel kur verilerini xml olarak sağla, sonra da kodun python versiyonunu yazarsın, hocaya çapraz platform bir uygulama olarak sunarız.” Buraya kadar tamamdık. Ne var ki algoritma seçiminin ardından neye uygulanacağı konusunda seçimi ilk hafta yapma mecburiyetimizden kaynaklı olarak bir şansızlık yaşadık.

Şöyle bir fikir vardı elimizde “Döviz kurlarını çekelim, bu kurların önceki günlere göre artış-azalışından yola çıkarak bir korelasyon hesaplayalım, korelasyon hesabına göre alım satım yaptıralım” Buraya kadar her şey güllük gülistanlıktı. Ancak genetik algoritmalar iteratif bir yapıya sahipti, bizim ise elimizdeki veriler hem dinamik değildi, hem bizim kontrolümüzde değildi, hem de lineer ilerlemiyordu (bizim kodun fikrine karar verişimiz bir de Donald reyizin seçimine denk gelince kurlar çılgınlar gibi bir yukarı bir aşağı hareket ediyordu pek tabii). Biz de algoritma fikrimizi şuna evirdik, ” Madem kurları oynatamıyoruz, kurların ileri zamanlı değerlerini de tahmin edemiyoruz, elimizdeki parayı minimum risk ile yatırabileceğimiz en iyi yöntemi knapsack ile bulalım. Bu mantıktan hareketle de en iyi 3 kuru alıp, elimizdeki (bizim belirlediğimiz) para miktarına göre alım yaptırmayı hedefledik. Yaptıracağımız alımı ise korelasyon katsayısı ile kurların çarpımının toplam değeri o kromozomun değerini oluşturacak şekilde knapsack algoritmasını kurguladık. Kodun aşama aşama gelişimini aşağıdaki github sayfasındaki commitleri takip ederek görebilirsiniz. Ayrıca .cs uzantılı halinde ise C# versiyonunu bulabilirsiniz, her iki dilde de uygulamayı geliştirmiş biri olarak diyebileceğim yegane şey, Python’un bu iş için biçilmiş kaftan gibi olduğu 🙂 Zaten kodun içeriğini incelerseniz C#’da yer yer tırmaladığımız, mecburen tarzanca yazdığımız kısımlara sık sık denk geleceksiniz. Sözü uzatmadan sizi koda yönlendireyim;

https://github.com/Natgho/knapsack-X

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir