Genetik programlama ile birim-testlerinden go kodunun ilk taslağının üretimi
Producing first drafts of go code from unit-tests with genetic programming
Yazar: UFUKTAN YILDIRIM
Danışman: PROF. DR. SEMRA GÜNDÜÇ
Ankara Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı
Derece: Yüksek Lisans, 2024
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control

Özet:
Genetik programlama bilgisayar programlarının rastgele uygulanan değişimler ve uyuma dayalı elemelerin tekrarıyla yani evrimsel süreçle elde edildiği bir program sentezi yöntemidir. Ancak genetik programlama 30 yılı aşkın geçmişine rağmen henüz pek çok modern programlama diline uyarlanamamıştır. Sebebi ise bu dillerin zengin özellik seti ve çok aşamalı test süreçlerinin çözüm uzayını en iyi evrimsel aramanın dahi yolunu kaybetmeden, yerel minimumlara takılmadan çözümü bulamayacağı kadar genişletmesidir. Bu çalışmanın amacı LLM'lerin kod üretim özelliğinin gördüğü geniş ilginin sebep olacağı öngörülen zorunlu ve derlemeli dillerde kod sentezi yöntemleri araştırmalarındaki hızlanmaya katkı sağlaması için literatürde ve deneylerde karşılaşılmış sorunların ve onlara geliştirilen çözüm önerilerinin paylaşılmasıdır. Çalışmada tanıtılan yöntemlerden biri olan Katmanlı Arama, ana aramanın keşifsel karakterini korumak hedefiyle çalışma zamanı, sözdizimi ve basım hatalarına sahip denekler ortaya çıktığı her seferde, çok adımlı tamirleri bulmak için sınırlandırılmış, sığ, sıkışık ve izole alt evrimler başlatır. Ana aramayı sadece semantik hataların giderimine göre yapılandırmaya imkan tanır. Bu sayede, davranışı iyileştirmek için birden fazla yapısal düzenleme gerektiren yeniliklerin prematüre elenmekten korunması hedeflenir. Paylaşılan bir başka yöntem ST-ASTGP, AST kaynaklı çözüm uzayı genişlemesini azaltma hedefiyle sadece genotipte değil aynı zamanda fenotipte de tip güvenliğini gözeterek daha az söz dizimi hatasına sahip daha iyi denekler üretir.

Abstract:
Genetic Programming is a program synthesis method that aims to find computer programs by repeatedly introducing randomly developed candidates and eliminating worser ones for generations. Yet, even after its 30 years long journey, there have been no success on applying it to an imperative and compiled language. Because of those languages' rich feature set and multi step testing process leading the solution space to expand further than the best evolutionary search can reach result before losing its way, stuck in local minima. Purpose of this work is to contribute into acceleration in code synthesis research on imperative and compiled languages which is expected to happen in public's recent interest on code producing abilities of LLMs by sharing solution ideas to current problems defined in literature and experimented in the research. One method introduced, Layered Search aims to protect explorative characteristic of the main search by spinning off overly restricted, shallower, dense and isolated sub-evolutions to quickly check possible, near fixes whenever a candidate with runtime, syntax or print errors is appeared in the main search. It enables main search to be tuned only for fixing semantic errors. This way, any innovation which needs multiple generations of structural improvement to improve behavior can get a chance against premature elimination. Another method ST-ASTGP targets reduction in AST-caused expansion in solution space by producing better candidates with less syntax errors by guarding type safety not only in the genotype but also in the phenotype as defined in language specification.