1.
fransızca bir terim olup, optimisation
en uygun duruma getirme anlamına gelir.
örnek/ optimize etmek.
bir gerçel fonksiyonu minimize ya da maksimize etmek amacı ile gerçek ya da tam sayı değerlerini tanımlı bir aralıkta seçip fonksiyona yerleştirerek sistematik olarak bir problemi incelemek ya da çözmek işlemlerini ifade eder.
en uygun duruma getirme anlamına gelir.
örnek/ optimize etmek.
bir gerçel fonksiyonu minimize ya da maksimize etmek amacı ile gerçek ya da tam sayı değerlerini tanımlı bir aralıkta seçip fonksiyona yerleştirerek sistematik olarak bir problemi incelemek ya da çözmek işlemlerini ifade eder.
devamını gör...
2.
yazılımda çok önemli bir konu ,uzun süredir yapay zeka ile kodlamasını yaptığım uygulamaya bugün test yapayım dedim, zaten tahmin ediyordum kötü olacağını ama beklediğimden iyi çıktı kerata. daha özel optimizasyon çalışması yapmadan bile 5000 kelime setinde tüm listede 2-3 saniyeyi bulsada 600 küsür kelime barındıran kategoriler arası geçiş 0.060 /0.030 saniye yani milisaniye. söz konusu sayı 2500 lere vardığında ise 1 saniye sürüyor kategorinin açılması 17 bin kelime ise 35 saniye sürdü.
amacım her oturuma(sekmeye) 50 bin kelimeye kadar sorunsuz ve hızlı bir optimizasyon yapmak. şu an aslında 5000 kelimelik için neredeyse sorunsuz çalışıyor bir kaç ayar çeksem. en azından nerede çöküyor onu gördüm nerede donuyor nerde hata var onları gördüm. sonraki test kodunu yazmadan veriyi izole edip ayrı veri dosyasında çalışmayı öğrenmem lazim birde dosyayı ayirsam da ayni klasörde olduğunda mı bilmiyorum öteki dosyaya veri aynı oluyor.
bu arada zamanında 1.5 milyon veriyide yükledim ,lakin o sadece arayüzleri kelime listesini scroll(kaydırma) ile test ediyordu. herhangi kelime ekleme, kategoriye girme yoktu. yani hali hazırda ana ortadaki yapı optimizationu sorunsuz. onda sorun yok. onu yaptıysam zamanında, diğerlerinide hallederim inşallah. sıfırdan nerelere gelmiş adamım ben bunda yaparım.
testten görüntüler
5000 lik kelime seti

20.000 lik kelime seti(yani ×4 kat)
70 saniye kelimeleri yaratıp yüklemesi
önemli olan neredeyse 40 saniye olan filtreleme süresi. aslında oran olarak 4 saniye olması lazım ama öyle değil işte bu nedenle baya optimizasyon üzerine çalışmam lazim.
diğer veriler tam doğru değil bir sebepten kaynaklı.


yüksek olasılıkla sql e falan geçmem gerekecek bakalım hayırlısı.
amacım her oturuma(sekmeye) 50 bin kelimeye kadar sorunsuz ve hızlı bir optimizasyon yapmak. şu an aslında 5000 kelimelik için neredeyse sorunsuz çalışıyor bir kaç ayar çeksem. en azından nerede çöküyor onu gördüm nerede donuyor nerde hata var onları gördüm. sonraki test kodunu yazmadan veriyi izole edip ayrı veri dosyasında çalışmayı öğrenmem lazim birde dosyayı ayirsam da ayni klasörde olduğunda mı bilmiyorum öteki dosyaya veri aynı oluyor.
bu arada zamanında 1.5 milyon veriyide yükledim ,lakin o sadece arayüzleri kelime listesini scroll(kaydırma) ile test ediyordu. herhangi kelime ekleme, kategoriye girme yoktu. yani hali hazırda ana ortadaki yapı optimizationu sorunsuz. onda sorun yok. onu yaptıysam zamanında, diğerlerinide hallederim inşallah. sıfırdan nerelere gelmiş adamım ben bunda yaparım.
testten görüntüler
5000 lik kelime seti

20.000 lik kelime seti(yani ×4 kat)
70 saniye kelimeleri yaratıp yüklemesi
önemli olan neredeyse 40 saniye olan filtreleme süresi. aslında oran olarak 4 saniye olması lazım ama öyle değil işte bu nedenle baya optimizasyon üzerine çalışmam lazim.
diğer veriler tam doğru değil bir sebepten kaynaklı.


yüksek olasılıkla sql e falan geçmem gerekecek bakalım hayırlısı.
devamını gör...
3.
yazılım geliştirmede kritik rol oynar , kaynakların en etkin ve verimli şekilde kullanılmasını sağlar.
#3707872 dan sonra sql yapısına geçip , lazy laoding sistemine geçtim. ayrıca bu sefer console ile yaptım testleri hem daha sağlıklı hem daha rahat oldu.
güncel veri olarak kalsın*
1- uygulama açılma süresi / geliştirilmeli
350.000 kelime ile (sadece bu elle manuel telefondan ölçtüm diğerleri sistemsel)
4-5 saniye
2- kategoriler arası geçiş / sorunsuz
5.000 kelime = 0.1064 saniye
10.000 kelime = 0.0826 saniye
20.000 kelime = 0.0945 saniye
50.000 kelime = 0.1076 saniye
100.000 kelime = 0.1261 saniye
185.000 kelime = 0.1442 saniye
3- harf filtreleme / sorunsuz
(185.000 kelimede 6000 civarı kelime listelendi)
deneme 1 = 0.2554 saniye
deneme 2 = 0.2512 saniye
deneme 3 = 0.2438 saniye
4- oturumlar/sekmeler arası geçiş / geliştirilmeli
50.000 kelimelik sekme
açılma: 0.6741 saniye
sekmeyi silme: 1.8 saniye
100.000 kelimelik sekme
açılma: 0.9156 saniye
sekmeyi silme: 2.5 saniye
200.000 keliemelik sekme
açılma: 1.4 saniye
sekmeyi silme: 3.8 saniye
5-kelime ekleme / geliştirilmeli
200 bin kelimede
2.3 saniye
100 bin kelimede
1.2 saniye
50 bin kelimede
0.7 saniye
10 bin kelimede
0.2 saniye
6-toplu kelime ekleme (20 kelime ile) / geliştirilmeli
200 bin kelimede
2.4 saniye
100 bin kelimede
1.4 saniye
50 bin kelimede
0.75 saniye
10 bin kelimede
0.35 saniye
7-toplu anlam yükleme / kritik nokta
henüz burdaki listeye lazy loading getirmediğim için uygulama çöktü çünkü 200.000 bini tamamen listelemeye çalıştı garibim.
!!! çok önemli / fonksiyon düzenlenmeli
8-hızlı anlam yükleme geliştirilmeli
istediğim zaman çıkış eklemeyi gözden kaçırdığım için sonra test edilecek ama kelime ekle ile aynı olacaktı yüksek ihtimal.
!!! fonksiyon düzenlenmeli
- listeyi ters çevirmek (apple - elma yerine elma - apple yapmak) / sorunsuz
200.000 kelimede
0.16 saniye
- harf filteresini ana dil/yabanc dil arası geçiş / geliştirilmeli
200.000 kelimede 6000 kelime listelendi
harf dağılımında (a:6537,b:6767,c:6723 ... z , a harfine basmak)
2.2 saniye
!!! not: ikisinide yükle uygulama açılınca, arkada verisi olsun, değişim daha hızlı olur
teknik merak edenler için
zaman testi için kullandığım fonksiyon
import time
def timeit(func):
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} süresi: {end - start:.4f} saniye")
return result
return wrapper
istediğim fonksiyonun başına @timeit koymam yeterli, buda komsol çıktısından aldığım ekran görüntüsü
#3707872 dan sonra sql yapısına geçip , lazy laoding sistemine geçtim. ayrıca bu sefer console ile yaptım testleri hem daha sağlıklı hem daha rahat oldu.
güncel veri olarak kalsın*
1- uygulama açılma süresi / geliştirilmeli
350.000 kelime ile (sadece bu elle manuel telefondan ölçtüm diğerleri sistemsel)
4-5 saniye
2- kategoriler arası geçiş / sorunsuz
5.000 kelime = 0.1064 saniye
10.000 kelime = 0.0826 saniye
20.000 kelime = 0.0945 saniye
50.000 kelime = 0.1076 saniye
100.000 kelime = 0.1261 saniye
185.000 kelime = 0.1442 saniye
3- harf filtreleme / sorunsuz
(185.000 kelimede 6000 civarı kelime listelendi)
deneme 1 = 0.2554 saniye
deneme 2 = 0.2512 saniye
deneme 3 = 0.2438 saniye
4- oturumlar/sekmeler arası geçiş / geliştirilmeli
50.000 kelimelik sekme
açılma: 0.6741 saniye
sekmeyi silme: 1.8 saniye
100.000 kelimelik sekme
açılma: 0.9156 saniye
sekmeyi silme: 2.5 saniye
200.000 keliemelik sekme
açılma: 1.4 saniye
sekmeyi silme: 3.8 saniye
5-kelime ekleme / geliştirilmeli
200 bin kelimede
2.3 saniye
100 bin kelimede
1.2 saniye
50 bin kelimede
0.7 saniye
10 bin kelimede
0.2 saniye
6-toplu kelime ekleme (20 kelime ile) / geliştirilmeli
200 bin kelimede
2.4 saniye
100 bin kelimede
1.4 saniye
50 bin kelimede
0.75 saniye
10 bin kelimede
0.35 saniye
7-toplu anlam yükleme / kritik nokta
henüz burdaki listeye lazy loading getirmediğim için uygulama çöktü çünkü 200.000 bini tamamen listelemeye çalıştı garibim.
!!! çok önemli / fonksiyon düzenlenmeli
8-hızlı anlam yükleme geliştirilmeli
istediğim zaman çıkış eklemeyi gözden kaçırdığım için sonra test edilecek ama kelime ekle ile aynı olacaktı yüksek ihtimal.
!!! fonksiyon düzenlenmeli
- listeyi ters çevirmek (apple - elma yerine elma - apple yapmak) / sorunsuz
200.000 kelimede
0.16 saniye
- harf filteresini ana dil/yabanc dil arası geçiş / geliştirilmeli
200.000 kelimede 6000 kelime listelendi
harf dağılımında (a:6537,b:6767,c:6723 ... z , a harfine basmak)
2.2 saniye
!!! not: ikisinide yükle uygulama açılınca, arkada verisi olsun, değişim daha hızlı olur
teknik merak edenler için
zaman testi için kullandığım fonksiyon
import time
def timeit(func):
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
end = time.perf_counter()
print(f"{func.__name__} süresi: {end - start:.4f} saniye")
return result
return wrapper
istediğim fonksiyonun başına @timeit koymam yeterli, buda komsol çıktısından aldığım ekran görüntüsü
devamını gör...
4.
pestisit tarama cihazlarında, pestisit etkenini cihaza tanıtma işlemi olarak da kullanılan tanım.
şuraya madalyalık tanım da şaapabilirdim ama sorry baby.
şuraya madalyalık tanım da şaapabilirdim ama sorry baby.
devamını gör...
5.
#3710038 güncel gelişmeler
1- uygulama açılma süresi
bu değişmedi fakat eskiden boş boş beklerken şu an yükleme ekranı ve logo çıkıyor
eskiler / yeniler şeklinde yaptım
2- kategoriler arası geçiş (%90 lara varan artış ve stabilite sağlandı)
5.000 kelime = 0.1064 saniye (0.006>)
10.000 kelime = 0.0826 saniye ( 0.006>)
20.000 kelime = 0.0945 saniye (0.01-0.02)
50.000 kelime = 0.10 saniye 0.02 -0.04)
1000.000 kelime = 0.12 saniye (0.08-0.10)
185.000 kelime = 0.14 saniye (200.000 kelimeye çıkardım süre 0.15 saniye)
3- harf filtreleme
kayda değer gelişim yok , gerekte yok.
4-oturumlar/sekmeler arası geçiş (%25 iyileşme)
200 bin kelimede yarım saniye falan açılması ama bunu nasıl ölçtüm o zaman bilmiyorum fakat silme sürelerini güncelleyelim.
50.000 kelimelik sekme
sekmeyi silme: 1.8 saniye (1.6)
100.000 kelimelik sekme
sekmeyi silme: 2.5 saniye (1.6)
200.000 keliemelik sekme
sekmeyi silme: 3.8 saniye (2.4)
6-toplu kelime ekleme (bunu geçiyorum, o zaman farkında değildim ama bu test için giriş, bundaki giriş kaydı ile normal elle görmesi farklı fonksiyonlar ondan dolayı anlamsız)
7-toplu anlam yükleme
bu sistemi değiştirdim, toplu/karmaşık yapıdan, sıralı ve odaklı tekil girişe geçildi. kullanıcı hatası minimize edildi.
8. maddedeki hızlı anlam girişi düzgün şuan. 7.madde ile birleştirdim.
9- listeyi ters çevirmek (apple - elma yerine elma - apple yapmak) %80 lere varan hızlanma (7.3 kat daha hızlı)
200.000 kelimede
0.16 saniye ( fakat bu çevirme eskiden sadece çeviriyordu , artık diğer maddedeki dile göre harf filtresini değiştirme butonunun işlevini görüyor.
oda
200.000 kelimede 6000 kelime listelendi
harf dağılımında (a:6537,b:6767,c:6723 ... z , a harfine basmak)
2.2 saniye idi yenisinde sadece 0.3 saniye. donma yok artık.
tüm bunların üstüne tkinter dan daha gelişmiş ve modern (customtkinter) görsel kütüphaneye geçildi .
1- uygulama açılma süresi
bu değişmedi fakat eskiden boş boş beklerken şu an yükleme ekranı ve logo çıkıyor
eskiler / yeniler şeklinde yaptım
2- kategoriler arası geçiş (%90 lara varan artış ve stabilite sağlandı)
5.000 kelime = 0.1064 saniye (0.006>)
10.000 kelime = 0.0826 saniye ( 0.006>)
20.000 kelime = 0.0945 saniye (0.01-0.02)
50.000 kelime = 0.10 saniye 0.02 -0.04)
1000.000 kelime = 0.12 saniye (0.08-0.10)
185.000 kelime = 0.14 saniye (200.000 kelimeye çıkardım süre 0.15 saniye)
3- harf filtreleme
kayda değer gelişim yok , gerekte yok.
4-oturumlar/sekmeler arası geçiş (%25 iyileşme)
200 bin kelimede yarım saniye falan açılması ama bunu nasıl ölçtüm o zaman bilmiyorum fakat silme sürelerini güncelleyelim.
50.000 kelimelik sekme
sekmeyi silme: 1.8 saniye (1.6)
100.000 kelimelik sekme
sekmeyi silme: 2.5 saniye (1.6)
200.000 keliemelik sekme
sekmeyi silme: 3.8 saniye (2.4)
6-toplu kelime ekleme (bunu geçiyorum, o zaman farkında değildim ama bu test için giriş, bundaki giriş kaydı ile normal elle görmesi farklı fonksiyonlar ondan dolayı anlamsız)
7-toplu anlam yükleme
bu sistemi değiştirdim, toplu/karmaşık yapıdan, sıralı ve odaklı tekil girişe geçildi. kullanıcı hatası minimize edildi.
8. maddedeki hızlı anlam girişi düzgün şuan. 7.madde ile birleştirdim.
9- listeyi ters çevirmek (apple - elma yerine elma - apple yapmak) %80 lere varan hızlanma (7.3 kat daha hızlı)
200.000 kelimede
0.16 saniye ( fakat bu çevirme eskiden sadece çeviriyordu , artık diğer maddedeki dile göre harf filtresini değiştirme butonunun işlevini görüyor.
oda
200.000 kelimede 6000 kelime listelendi
harf dağılımında (a:6537,b:6767,c:6723 ... z , a harfine basmak)
2.2 saniye idi yenisinde sadece 0.3 saniye. donma yok artık.
tüm bunların üstüne tkinter dan daha gelişmiş ve modern (customtkinter) görsel kütüphaneye geçildi .
devamını gör...
6.
mühendislik terminolojisinde “en iyileme” şeklinde çevirmek mümkün.
tek amaçlı fonksiyonlarda belirgin kısıtlar çerçevesinde en iyi olasılık/ları bulmak için yapılır. amaç maksimizasyon veya minimizasyon olabilir. kısıtları ise, ‘feaseble area’ denilen çözüm kümesinin çerçevesini belirleyen sınırlar olarak tanımlayabiliriz.
kısıtlar problemin çözüm kümesini 0 veya sınırlı sayıda veya sonsuz yapabilir. 0 bize problemin çözümsüz olduğunu, sonsuz ise çözmeye lüzum olmadığını gösterir. diğer yandan, tekil amaçlı problemlerin çözüm kümesinde amacı sağlayan birden fazla (optimal sonuç) çözüm olabilir. bu da bize bu en iyilerden istediğimizi seçebileceğimizi söyler.
diğer yandan tekil amaçlı tekil çözümlü problemler -bile- kısıtlar nedeniyle çözümü çok zor bir hale gelebilir.
örneğin bin packing denilen problemin bir varyasyonunda; silindirik bir kutuya farklı çaplardaki (sınırlı sayıdaki) demir bilyeleri, kutu içinde minimum hava boşluğu kalacak şekilde yerleştirmek amaçlanır. gayet somut bir lojistik problemi. tekil bir amacı var, silindir çapı, silindir yüksekliği ve küre çapları gibi gayet belli belirgin basit kısıtları var. birden fazla eşit sonucu veren çözüm varsa bile bize birisi yeter.
gelgelelim; bazı yaklaşımlar olsa da bu problem np-hard (non-determenistic polinom) sınıfındadır. matematiksel ayrıntısına girmeden şunu diyebiliriz: kısıt ve amaç basit olmakla birlikte çözmek çok zor.
kürelerin farklı çapları nedeniyle birbirlerine ve silindir yüzeyine temas noktaları her varyasyonda değişir, bu da kutuda kalan hava boşluğu miktarının değişmesi demektir.
kutu hacmininin verimli kullanımı için bize en iyi varyasyon lazım ancak deneme yanılma yöntemiyle bu tür bir problemin çözümü en hızlı işlemcilerle bile yüzyıllar sürer. kısıtlardaki en ufak artış deneme sayısını üstel arttırabilir. arttırabilir, diyorum çünkü böylesi bir değişimin (aynı çap grubunda birden fazla küre olduğu hallerde) deneme yanılma sayısında indirgemeci etkisi de olabilir. düşünün işte; o denli bilmiyoruz ki, düz mantık, “daha geniş silindir hacmi, daha çok küre, daha kompleks problem olurdu herhalde” diyoruz. ama o bile kesin değil.
böylesi durumlarda kısıtlar veya bazı dizilim varyasyonları size yeni bir fikir sağlar ve böylelikle yeni bir kısıt elde edebilirsiniz. (örnek: şu çaptaki topların yerleşiminde şu yaklaşım faydalı) böylesi basit görünen bir çıkarım problemin doğrudan çözülmesini sağlayabileceği gibi, çözüm kümesini daraltıcı etkisi nedeniyle deneme yanılma sayısını milyonlarca kat düşürebilir.
eğer problemi çözmek için her olasılığı deneyip sonuçları karşılaştırarak en iyi’yi buluyorsanız buna optimizasyon denmiyor. çünkü bu, problemin optimal çözüm kümesini bulma adına bir iyileştirme içermiyor. bir diğer deyişle; probleme, her olasılığı deneme dışında çözüm öneriniz/yönteminiz yoksa optimize edemiyorsunuz demektir.
böyle durumlarda bazı sezgisel yöntemler kullanılır. bunlar problemin kati çözümünü sağlamasa da çözüm kümesini daraltıcı etki sunarlar. ancak burada, günlük anlamdaki his olan sezgiden değil, az önce bahsettiğim gibi amaç veya kısıt tipinin yarattığı etkileşimi gözlemleyerek/yorumlayarak yeni kısıt geliştirmek gibi matematiksel bir yaklaşımdan bahsediyoruz. hatta bazı sezgisel yöntemlerde teorik çıkarım yetmez, pratik deneme yanılmalardan elde edilen ilk sonuçlarla dar bir veri kümesi elde edilir ve o kümede nedensellik veya en azından korelasyon aranır ve bir metot elde edilir. ancak metodun çözüm kümesi daraltıcı etkisinin matematiksel ispatı yoksa sezgisel bir yöntemden bahsedemeyiz. (üfürüyorsunuz manasına gelir)
yani mesela hali hazırda asal sayıların tespitine ilişkin optimal bir yöntem yok. baya baya bir sayının asal olup olmadığımı anlamak için böleni var mı diye onun yarısından küçük sayılarla tek tek denemek zorundasınız. bu nedenle milyon haneli asal sayıları tespit ettikçe bir sonraki asalı bulmak için yapmanız gereken deneme yanılma sayısı üstel artış gösteriyor. bu noktada birisi çıkıp “n bir asal sayı ise, [(2 üssü n) - 1] de asal bir asal sayıdır” derse (bkz: mersenne asal sayısı) elinizde küçük bir asal sayı testi olur. bu da asal sayılar kümesinde bu denkleme uyan asal sayıları çok hızlı tespit etmenizi sağlar. evet, n sayısı büyüdükçe iki mersenne asalı arasında (bu denkleme uymayan) yine milyonlarca asal sayı olabilir. bütün kümeye ihtiyacınız yoksa (ki sonsuz olduğu varsayılıyor) böylesi bir yaklaşım optimize edici olarak tanımlanabilir. ancak bir şartla; milyonlarca denemede bu sonuç doğrulanıyor olsa bile ve hiç yanılmamış olsa bile bunun matematiksel ispatı yoksa hiçbir değeri yoktur. zira bir şeyin aksinin ispatlanmaması doğruluğuna delil değildir.
optimizasyondaki sezgisel metotları, his olan sezgiden ayıran şey burada yatar. metodunuzun; belirlenen amaç doğrultusunda belirlenen kısıtların çizdiği çerçevede, bütün olasılık kümesini ele almanız gerekmediğini, çünkü şu şu olasılıkların şu nedenle zaten optimal çözüm olamayacağını iddia etmesi ve bunun matematiksel olarak ispatlanabilmesi gerekir.
sezgisel metotlar çözüm kümesini daraltmada bazen o kadar faydalıdır ki, ideal bir metot aramaktansa bunları uygulayıp kalana dair deneme yanılma yapmak yahut olası riskleri göze almak çok daha makul hale gelir. hatta bazen ideal (kesin sonucu bulan) metoda sahip olsanız bile problemde onu uygulamak çok fazla efor, zaman, veri, maliyet gerektirdiğinden sezgisel metotla ikinci, üçüncü en iyiye denk gelme riskini kabullenmek mantıklı olabilir.
hasılı kelam, optimizasyondan bahsedebilmek için ya probleme dair kati sonuca ulaştıran ya da çözüm kümesini daraltan bir yaklaşım gerekir.
(bu tür problemlerin bir de çok amaçlı varyasyonları var ki, bunlardan bazıları için metot geliştirmeyi düşünmek, buna cüret etmek şöyle dursun, amacı tekil hale getirmenin bir yolu var mı, diye kafa yoruyorlar. bunların en basitleri, çatışan iki amaçlı fonksiyonlardır. amaçlardan birine dair maksimizasyon diğerinde minimizasyon sonucu doğurur -hiç değilse dinamik belli olduğundan- ikisini aynı anda maksimize/minimize edici makul bir orta nokta ararsınız. tabi amaç artışı varyasyonların üstel artışına sebep olur.)
örneklere dönersek;
kürelerin temas noktası varyasyonlarının silindir içerisinde yaratacağı amorf şekillerde hacim artırıcı (boşluk azaltıcı) bir nedensellik düşünemiyorsanız non deterministic (np-hard) bir alandasınız demektir. durumunuz, denklem çözen birinin x = x bulmasından hallicedir, bile diyemeyiz. çünkü en azından onun elinde hata yaptığına dair bir veri var, sizde o da yok. hata yaptım, diyebilecek kadar bir girişimde bile bulunamıyorsanız haliniz içler acısıdır.
asal sayıların grafiksel gösterimde kümelenmesinden bir örüntü (lineer, parabolik, trend vs) çıkartamıyorsanız yahut birbirleriyle matematiksel ilişkisine dair (farkları, toplamları, karesi, kökü vs) bir nedensellik kuramıyorsanız bir sonraki en büyük asal sayıyı araştırmaktan gayri çareniz yok demektir. herkes yaptığınız işin angaryadan başka bir şey olmadığını bilir ama yüzünüze söylemez. aferin koçuma, adam bilim için çalışıyor, falan deyip bıyık altından gülerler.
gerçi bu alanda böyle bir şeyin tespit edilmesi genel anlamda kriptografinin, spesifik olarak da asal sayı rassallığıyla hash’lenen bütün şifrelerin tehlikeye girmesi demektir. küresel finans alt yapısından haberleşme ağlarına, nükleer silah kodlarından istihbarat akışına kadar veri gizliliğinin önem arz ettiği her şeyin tehlikeye girmesinin yaratacağı kaosu düşünemiyorum. yani, dünyayı yapay zekanın değil, asal sayılarla kafayı bozmuş bir delinin yok etmesi daha kuvvetli bir ihtimal.
hasılı kelam; optimizasyon bir mühendislik terimi olarak bir şeyin daha iyi veya daha verimli sonuçlar üretmesi için tadil edilmesi, sorun yaratan etkilerden arındırılması, hataların giderilmesi anlamında iyileştirilmesi demek değildir. veri setinden nedensellik üreterek yahut doğrudan teorik olarak en iyi sonuç/lara ulaştıracak metot üretmeyi gerektiren bir iyileştirmedir. bir eylemin, düzenlemenin, kararın, yaklaşımın; sadece daha iyi, daha verimli sonuç üretiyor olması o sistemin optimize edildiği anlamına gelmez. hatta bazen bir öncekine göre daha iyi sonuç sizi teorik en iyi’ye karşı körleştirici (dolayısıyla uzaklaştırıcı) bir sonuç doğurmuş bile olabilir.
tek amaçlı fonksiyonlarda belirgin kısıtlar çerçevesinde en iyi olasılık/ları bulmak için yapılır. amaç maksimizasyon veya minimizasyon olabilir. kısıtları ise, ‘feaseble area’ denilen çözüm kümesinin çerçevesini belirleyen sınırlar olarak tanımlayabiliriz.
kısıtlar problemin çözüm kümesini 0 veya sınırlı sayıda veya sonsuz yapabilir. 0 bize problemin çözümsüz olduğunu, sonsuz ise çözmeye lüzum olmadığını gösterir. diğer yandan, tekil amaçlı problemlerin çözüm kümesinde amacı sağlayan birden fazla (optimal sonuç) çözüm olabilir. bu da bize bu en iyilerden istediğimizi seçebileceğimizi söyler.
diğer yandan tekil amaçlı tekil çözümlü problemler -bile- kısıtlar nedeniyle çözümü çok zor bir hale gelebilir.
örneğin bin packing denilen problemin bir varyasyonunda; silindirik bir kutuya farklı çaplardaki (sınırlı sayıdaki) demir bilyeleri, kutu içinde minimum hava boşluğu kalacak şekilde yerleştirmek amaçlanır. gayet somut bir lojistik problemi. tekil bir amacı var, silindir çapı, silindir yüksekliği ve küre çapları gibi gayet belli belirgin basit kısıtları var. birden fazla eşit sonucu veren çözüm varsa bile bize birisi yeter.
gelgelelim; bazı yaklaşımlar olsa da bu problem np-hard (non-determenistic polinom) sınıfındadır. matematiksel ayrıntısına girmeden şunu diyebiliriz: kısıt ve amaç basit olmakla birlikte çözmek çok zor.
kürelerin farklı çapları nedeniyle birbirlerine ve silindir yüzeyine temas noktaları her varyasyonda değişir, bu da kutuda kalan hava boşluğu miktarının değişmesi demektir.
kutu hacmininin verimli kullanımı için bize en iyi varyasyon lazım ancak deneme yanılma yöntemiyle bu tür bir problemin çözümü en hızlı işlemcilerle bile yüzyıllar sürer. kısıtlardaki en ufak artış deneme sayısını üstel arttırabilir. arttırabilir, diyorum çünkü böylesi bir değişimin (aynı çap grubunda birden fazla küre olduğu hallerde) deneme yanılma sayısında indirgemeci etkisi de olabilir. düşünün işte; o denli bilmiyoruz ki, düz mantık, “daha geniş silindir hacmi, daha çok küre, daha kompleks problem olurdu herhalde” diyoruz. ama o bile kesin değil.
böylesi durumlarda kısıtlar veya bazı dizilim varyasyonları size yeni bir fikir sağlar ve böylelikle yeni bir kısıt elde edebilirsiniz. (örnek: şu çaptaki topların yerleşiminde şu yaklaşım faydalı) böylesi basit görünen bir çıkarım problemin doğrudan çözülmesini sağlayabileceği gibi, çözüm kümesini daraltıcı etkisi nedeniyle deneme yanılma sayısını milyonlarca kat düşürebilir.
eğer problemi çözmek için her olasılığı deneyip sonuçları karşılaştırarak en iyi’yi buluyorsanız buna optimizasyon denmiyor. çünkü bu, problemin optimal çözüm kümesini bulma adına bir iyileştirme içermiyor. bir diğer deyişle; probleme, her olasılığı deneme dışında çözüm öneriniz/yönteminiz yoksa optimize edemiyorsunuz demektir.
böyle durumlarda bazı sezgisel yöntemler kullanılır. bunlar problemin kati çözümünü sağlamasa da çözüm kümesini daraltıcı etki sunarlar. ancak burada, günlük anlamdaki his olan sezgiden değil, az önce bahsettiğim gibi amaç veya kısıt tipinin yarattığı etkileşimi gözlemleyerek/yorumlayarak yeni kısıt geliştirmek gibi matematiksel bir yaklaşımdan bahsediyoruz. hatta bazı sezgisel yöntemlerde teorik çıkarım yetmez, pratik deneme yanılmalardan elde edilen ilk sonuçlarla dar bir veri kümesi elde edilir ve o kümede nedensellik veya en azından korelasyon aranır ve bir metot elde edilir. ancak metodun çözüm kümesi daraltıcı etkisinin matematiksel ispatı yoksa sezgisel bir yöntemden bahsedemeyiz. (üfürüyorsunuz manasına gelir)
yani mesela hali hazırda asal sayıların tespitine ilişkin optimal bir yöntem yok. baya baya bir sayının asal olup olmadığımı anlamak için böleni var mı diye onun yarısından küçük sayılarla tek tek denemek zorundasınız. bu nedenle milyon haneli asal sayıları tespit ettikçe bir sonraki asalı bulmak için yapmanız gereken deneme yanılma sayısı üstel artış gösteriyor. bu noktada birisi çıkıp “n bir asal sayı ise, [(2 üssü n) - 1] de asal bir asal sayıdır” derse (bkz: mersenne asal sayısı) elinizde küçük bir asal sayı testi olur. bu da asal sayılar kümesinde bu denkleme uyan asal sayıları çok hızlı tespit etmenizi sağlar. evet, n sayısı büyüdükçe iki mersenne asalı arasında (bu denkleme uymayan) yine milyonlarca asal sayı olabilir. bütün kümeye ihtiyacınız yoksa (ki sonsuz olduğu varsayılıyor) böylesi bir yaklaşım optimize edici olarak tanımlanabilir. ancak bir şartla; milyonlarca denemede bu sonuç doğrulanıyor olsa bile ve hiç yanılmamış olsa bile bunun matematiksel ispatı yoksa hiçbir değeri yoktur. zira bir şeyin aksinin ispatlanmaması doğruluğuna delil değildir.
optimizasyondaki sezgisel metotları, his olan sezgiden ayıran şey burada yatar. metodunuzun; belirlenen amaç doğrultusunda belirlenen kısıtların çizdiği çerçevede, bütün olasılık kümesini ele almanız gerekmediğini, çünkü şu şu olasılıkların şu nedenle zaten optimal çözüm olamayacağını iddia etmesi ve bunun matematiksel olarak ispatlanabilmesi gerekir.
sezgisel metotlar çözüm kümesini daraltmada bazen o kadar faydalıdır ki, ideal bir metot aramaktansa bunları uygulayıp kalana dair deneme yanılma yapmak yahut olası riskleri göze almak çok daha makul hale gelir. hatta bazen ideal (kesin sonucu bulan) metoda sahip olsanız bile problemde onu uygulamak çok fazla efor, zaman, veri, maliyet gerektirdiğinden sezgisel metotla ikinci, üçüncü en iyiye denk gelme riskini kabullenmek mantıklı olabilir.
hasılı kelam, optimizasyondan bahsedebilmek için ya probleme dair kati sonuca ulaştıran ya da çözüm kümesini daraltan bir yaklaşım gerekir.
(bu tür problemlerin bir de çok amaçlı varyasyonları var ki, bunlardan bazıları için metot geliştirmeyi düşünmek, buna cüret etmek şöyle dursun, amacı tekil hale getirmenin bir yolu var mı, diye kafa yoruyorlar. bunların en basitleri, çatışan iki amaçlı fonksiyonlardır. amaçlardan birine dair maksimizasyon diğerinde minimizasyon sonucu doğurur -hiç değilse dinamik belli olduğundan- ikisini aynı anda maksimize/minimize edici makul bir orta nokta ararsınız. tabi amaç artışı varyasyonların üstel artışına sebep olur.)
örneklere dönersek;
kürelerin temas noktası varyasyonlarının silindir içerisinde yaratacağı amorf şekillerde hacim artırıcı (boşluk azaltıcı) bir nedensellik düşünemiyorsanız non deterministic (np-hard) bir alandasınız demektir. durumunuz, denklem çözen birinin x = x bulmasından hallicedir, bile diyemeyiz. çünkü en azından onun elinde hata yaptığına dair bir veri var, sizde o da yok. hata yaptım, diyebilecek kadar bir girişimde bile bulunamıyorsanız haliniz içler acısıdır.
asal sayıların grafiksel gösterimde kümelenmesinden bir örüntü (lineer, parabolik, trend vs) çıkartamıyorsanız yahut birbirleriyle matematiksel ilişkisine dair (farkları, toplamları, karesi, kökü vs) bir nedensellik kuramıyorsanız bir sonraki en büyük asal sayıyı araştırmaktan gayri çareniz yok demektir. herkes yaptığınız işin angaryadan başka bir şey olmadığını bilir ama yüzünüze söylemez. aferin koçuma, adam bilim için çalışıyor, falan deyip bıyık altından gülerler.
gerçi bu alanda böyle bir şeyin tespit edilmesi genel anlamda kriptografinin, spesifik olarak da asal sayı rassallığıyla hash’lenen bütün şifrelerin tehlikeye girmesi demektir. küresel finans alt yapısından haberleşme ağlarına, nükleer silah kodlarından istihbarat akışına kadar veri gizliliğinin önem arz ettiği her şeyin tehlikeye girmesinin yaratacağı kaosu düşünemiyorum. yani, dünyayı yapay zekanın değil, asal sayılarla kafayı bozmuş bir delinin yok etmesi daha kuvvetli bir ihtimal.
hasılı kelam; optimizasyon bir mühendislik terimi olarak bir şeyin daha iyi veya daha verimli sonuçlar üretmesi için tadil edilmesi, sorun yaratan etkilerden arındırılması, hataların giderilmesi anlamında iyileştirilmesi demek değildir. veri setinden nedensellik üreterek yahut doğrudan teorik olarak en iyi sonuç/lara ulaştıracak metot üretmeyi gerektiren bir iyileştirmedir. bir eylemin, düzenlemenin, kararın, yaklaşımın; sadece daha iyi, daha verimli sonuç üretiyor olması o sistemin optimize edildiği anlamına gelmez. hatta bazen bir öncekine göre daha iyi sonuç sizi teorik en iyi’ye karşı körleştirici (dolayısıyla uzaklaştırıcı) bir sonuç doğurmuş bile olabilir.
devamını gör...