Önceki bir versiyondaki bazı yorumları ele almak için bu cevabı tekrar yazdım.
Oyunlara odaklanmayan NP-eksiksizliği için Wikipedia tanımını okuduğunuzu varsayıyorum . NP-bütünlüğünün ve oyun teorisinin tam anlamını bir miktar sulayacağım ve bir NP-Tamamlanan oyunun özünü açıklayacağım.
Alternatif hamleleri olan 2 oyunculu bir oyun düşünelim, daha da kısıtlı olarak bu temelde Kombinatoryal oyunlar hakkında . Temel olarak, yapabileceğiniz bazı hamlelerin olduğu ve bunlardan birini seçmeniz gereken bir oyun. "Mükemmel" olarak oynamak istersiniz, bu da asla "kötü" bir hareket yapamayacağınız anlamına gelir. Bu yüzden izin verilen hareketlerden en iyisini seçmek istersiniz. (Tabii ki rakibiniz aynı hedefe sahip ...)
Mükemmel oyunun her zaman kazanacağınız anlamına gelmediğini unutmayın. Oyunun kuralları, birinci veya ikinci oyuncunun kazanması gereken şekilde olabilir. Ayrıca Tic-Tac-Toe gibi bazı oyunlar berabere bitmelidir. Bu nedenle, "mükemmel oyun" un bu tartışmada anlamı:
(1) Asla kazanan pozisyonda olmayacaksınız ve sonra oyunu kaybedeceksiniz çünkü “kötü” bir hamle yaptınız
(2) Alma şansını asla kaçırmayacaksınız Böyle bir fırsat ortaya çıkarsa kazanan pozisyona.
Oyunun şu anki durumu göz önüne alındığında, en iyi hamleyi hesaplamak için "verimli bir algoritma" kullanabilmek. Öte yandan, oyun ağacının tamamında arama yapmak zorunda olan bir algoritmanın "verimsiz bir algoritma" olduğunu not edelim.
CBnT
T∝aBa+bBα−1+cBα−2+...+hB0
α
T∝aBn
n
Şimdi önemli olan nokta, NP tamamlanmış bir oyun için mükemmel bir şekilde çalışan, etkili bir algoritmaya, polinom zamanına sahip olmanın imkansız olmasıdır . Mükemmel bir şekilde oynamak için NP-tamamlanmış bir problem tanım olarak, polinom olmayan bir zamanda çalışan verimsiz bir algoritma ile çözülmelidir.
Çalışma süresinin bir insan tarafından algılanan tepki süresi değil, gerçek hesaplama sayısı ile ilgili olduğunu unutmayın. Tic-Tac-Toe gibi küçük bir oyun için, bilgisayar gelecekteki tüm hareketleri oynayabilir ve yine de bir insan tarafından algılandığı gibi hızlı bir şekilde yanıt verebilir.
İçin Nim bir polinom zaman algoritması oluşturmak mümkündür. Oyunun herhangi bir noktasında, algoritma hangi oyuncunun kazanan bir hamle olduğunu ve bu hamlenin ne olması gerektiğini hesaplayabilir.
Öte yandan, Qubic oyununu ele alalım . (Bir 3B ızgarada 4 satır yapmaya çalışıyorsunuz. Bu yüzden 4x4x4 ızgara üzerinde aslında tic-tac-toe.) Qubic NP-tamamlandı ve bir sonraki mükemmel hareketi hesaplamak için hiçbir polinom zaman algoritması yok. Halen kazanma şansınız olup olmadığını bilmenin tek yolu, belirli bir hareketin kazanan olduğunu ya da en azından kaybeden olmadığını doğrulamak için her iki oyuncunun tüm olası hareketlerini denemektir.
Gerçekten de, Qubic için oyun ağacının tamamı yeterince küçüktür, böylece mükemmel bir şekilde çalışabilen bir bilgisayar programına kodlanabilir. Kodlamanın anlamı, oyun ağacının tamamının keşfedilmesi ve tüm hamle işlemlerinin önceden yapılmasıdır. Böylece, program esasen geçerli pano durumunu kullanarak hızlı bir veritabanı çağrısı yapabilir ve her bir hamle işlemi yapıldığında ağaç araması yapmak zorunda kalmadan o pano durumu için en iyi hamleyi geri alabilir. Bu gerçekten bizim burada amaçlarımız için bir "hile" dir.
Şimdi satranç oynama programlarının diğer bazı özelliklerini göz ardı ederek değerlendirme işlevini tartışmak için satranç tartışalım . Satranç hala çözülmemiş bir oyundur . Birinci veya ikinci oyuncunun kazanması gerekip gerekmediği bilinmemektedir. Herhangi bir kurul pozisyonu verilmesi ve kimin kazanacağını kesin olarak tahmin etmek mümkün değildir. Aslında satranç o kadar büyük bir oyun ağacına sahiptir ki, tüm oyun ağacını aramak imkansızdır. Geçerli bilgisayarlardan yalnızca 10 veya 100 kat daha hızlı değil, milyarlarca zaman daha hızlı olan bilgisayarlara ihtiyacınız olacak. ( Kuantum hesaplamanın bu Gordian düğümünü kesebileceği umudu var .)
Satranç değerlendirme işlevini mümkün olan her hamleye en iyi hamle olma olasılığını vermek olarak düşünün. Bir satranç programının yaptığı şey, ileride bakışları değerlendirme işleviyle birleştirmek. Böylece, program, tahta pozisyonuna "iyi" bir puan verilebilecek bir noktaya gelinceye kadar gelecekteki muhtemel tüm hareketlere bakar. Bilgisayar, ağaçtaki tüm olası yolları bu şekilde değerlendirir ve sonra yolu en iyi skorla seçer. Araştırma, değerlendirilen tüm yollar için hiçbir zaman oyunun sonuna ulaşmadığından, tüm satranç programları sonuçta kusurlu bir değerlendirme işlevi kullanır. (Oyunun sonuna yaklaştıysanız, bilgisayar gelecekteki tüm hareketlere bakabilir.) Bu, program bir noktada kazanan bir konumda olsa bile, programı yenmek mümkün olabilir.