SORU
8 EKİM 2011, CUMARTESİ


Nasıl sayı tahmin oyunu(twist) algoritma yaklaşımı?

Öğrenme programlama (python ve algo.) olduğum ve ilgimi çeken bir proje üzerinde çalışmak için çalışıyordu. Birkaç temel python komut oluşturdum ama kurmaya çalışıyorum bir oyun için bir çözüm yaklaşımı nasıl emin değilim.

Oyun çalışır:

kullanıcıların bir değeri olan eşyalar verilecektir. Örneğin

Apple = 1
Pears = 2
Oranges  = 3

Sonra da onlar gibi herhangi bir combo seçmek için bir şans (yani 100 elma, 20 armut ve 1 portakal) alacak. Bilgisayarı alır tek çıkış toplam değeri(bu örnekte, $143 şu anda). Bilgisayarın ne olduğunu tahmin etmeye çalışın. Belli ki doğru bir ilk dönüş almak mümkün olmayacak.

         Value  quantity(day1)  value(day1)
Apple    1      100             100
Pears    2      20              40
Orange   3      1               3
Total           121             143

Bir sonraki dönüş kullanıcı toplam miktar (ya da tercih edebiliriz başka bir yüzde. onların numaraları ama artık %5'ten değiştirebilirsiniz Örneğin %5'i kullanın.) edeceğim. Meyve fiyatlarının toplam değeri de bağlı olabilir(rasgele) değişim(sadelik için bu örnekte meyve fiyatları değişen ben değilim). Yukarıdaki örnek, oyunun 2 gün kullanarak, kullanıcı günde 3 $152 $164 değerini döndürür. İşte size bir örnek.

quantity(day2)  %change(day2)   value(day2) quantity(day3)  %change(day3)   value(day3)
104                             104         106                             106
21                              42          23                              46
2                               6           4                               12
127             4.96%           152         133             4.72%           164

*(Umarım bu tablo ortaya çıkıyor, kaldım elle boşluk onları bu yüzden umarım onun değil sadece benim ekran çalışmazsa bana bildirin ve ben denemek için upload bir ekran görüntüsü).

Eğer miktarları zaman(kullanıcı numaralarını girerek tutmak için sabır gerekir varsayarak) içinde ne olduğunu anlamaya eğer görmek için çalışıyorum. Şu an benim tek kısıtlama, kullanıcı sonsuza kadar girecek 5% doğruluk içinde şu an olamam yani daha 5'inden az olamaz toplam değeri olduğunu biliyorum.

Şimdiye kadar yaptıklarım

İşte benim çözüm şu ana kadar(çok değil). Temelde tüm değerleri alır ve onları tüm olası kombinasyonları(bu kısmı bitmiştir) anlamaya. Alıyorum o zaman tüm olası kombinasyonları ve bunları bir veritabanı gibi bir sözlük(örneğin $143, olabilir bir sözlük girdisi {elma:143, Armut:0, Portakal :0}..tüm yol {elma:0, Armut:1, Portakal :47}. Tüm olasılıklar listesi var, bu yüzden yeni bir numara ben bunu her zaman yapıyorum.

Sıkışıp kaldım burada. Yukarıdaki kuralları kullanarak, nasıl mümkün olan en iyi çözüm bulabilir miyim? Otomatik olarak iki gün verileri karşılaştırır ve daha önceki gün verileri %5 sapma tüm olasılıkları ortadan kaldıran bir fitness fonksiyonu ihtiyacım var.

Soru:

Kullanıcı ile benim sorum toplam değişen ve tüm olasılıklar listesini bana veriyor, bu nasıl bir yaklaşım gerekir? Ben öğrenmek için ne yapmam gerekiyor? Herhangi algoritmalar orada ya da geçerli olduğunu kullanabileceğim teorileri var mı? Ya da, bana hatamı anlıyorum, bu amaca uygun yapmak için ekleyebilirim ne önerebilirsiniz(bugünkü hali. eğer onun değil yardım için Düşünme daha fazla meyve eklemek,ve 3, vb.) en az almak gerekir diyordum? Ayrıca, sadece genetik algoritmalar belli belirsiz bir anlayış var ama onları burada iyi gider diye düşündüm, eğer orada bir şey olursa kullanabilirim?

Herhangi bir tavsiye veya ipuçları büyük ölçüde(lütfen bana söyleme sadece bu oyun imkansız) mutluluk duyacağız yüzden öğrenmek için çok hevesliyim.

Şimdiden teşekkürler.

GÜNCELLEME: bu da çözülmesi zor olan geri bildirim Almak. Çok düşündüm başka bir koşul eklemek için oyun o karışmayacak da ne oyuncu yapıyor(oyun aynı kalır onları) ama her gün değeri meyve değişim fiyatı(rasgele). Bunu çözmek daha kolay olur? 5% hareket ve meyve değer bazı değişiklikler nedeniyle içinde, sadece birkaç açılan bir zaman olması mümkün. Gün 1, Her şey mümkün ve elde yeterince yakın menzil neredeyse imkansız, ama fiyatlar meyveleri değiştirmek ve kullanıcı tek tercih 5% değişim, sonra da gerekmiyor(zaman) aralığı dar olması ve dar. Yukarıdaki örnekte, eğer fiyatlar uçucu yeterli benim aklıma kaba kuvvet çözüm o verdi bana bir dizi için sanırım, ama ben de onu merak ediyorum varsa bir daha zarif bir çözüm veya başka çözümler için devam daralan bu zaman aralığında.

UPDATE2: okuma ve etrafında soran Sonra, bu meyve fiyatlarının yanı sıra toplam miktar(ağırlık son veri noktası ağır) değişiklikleri izleyen gizli markov/Viterbi bir sorun olduğuna inanıyorum. İlişki olsa da uygulamak için nasıl emin değilim. Bu durumda yanlış olabileceğini düşünüyorum ama en azından bu makine bir tür öğrenme bir sorun olduğundan şüphelenmeye başladım.

Test çalışması(az sayıda) yarattı ve bir jeneratör kullanıcı tarafından oluşturulan veri otomatikleştirme yardım etmek için geldim ve daha ne olduğunu görmek için bir grafik oluşturmak için çalışıyorum.Update3: İşte kod, toplam değerleri ve kullanıcılar aslında miktarlarda meyve ne yorumlar ile birlikte.

#!/usr/bin/env python
import itertools

#Fruit price data
fruitPriceDay1 = {'Apple':1,'Pears':2,'Oranges':3}
fruitPriceDay2 = {'Apple':2,'Pears':3,'Oranges':4}
fruitPriceDay3 = {'Apple':2,'Pears':4,'Oranges':5}

#generate possibilities for testing(Warning..will not scale with large numbers)
def possibilityGenerator(target_sum, apple, pears, oranges):
    allDayPossible = {}
    counter = 1
    apple_range = range(0, target_sum   1, apple)
    pears_range = range(0, target_sum   1, pears)
    oranges_range = range(0, target_sum   1, oranges)
    for i, j, k in itertools.product(apple_range, pears_range, oranges_range):
        if i   j   k == target_sum:
            currentPossible = {}
            #print counter
            #print 'Apple', ':', i/apple, ',', 'Pears', ':', j/pears, ',', 'Oranges', ':', k/oranges
            currentPossible['apple'] = i/apple
            currentPossible['pears'] = j/pears
            currentPossible['oranges'] = k/oranges
            #print currentPossible
            allDayPossible[counter] = currentPossible
            counter = counter  1
    return allDayPossible

#total sum being returned by user for value of fruits            
totalSumDay1=26 # computer does not know this but users quantities are apple: 20, pears 3, oranges 0 at the current prices of the day
totalSumDay2=51 # computer does not know this but users quantities are apple: 21, pears 3, oranges 0 at the current prices of the day
totalSumDay3=61 # computer does not know this but users quantities are apple: 20, pears 4, oranges 1 at the current prices of the day
graph = {}
graph['day1'] = possibilityGenerator(totalSumDay1, fruitPriceDay1['Apple'], fruitPriceDay1['Pears'], fruitPriceDay1['Oranges'] )
graph['day2'] = possibilityGenerator(totalSumDay2, fruitPriceDay2['Apple'], fruitPriceDay2['Pears'], fruitPriceDay2['Oranges'] )
graph['day3'] = possibilityGenerator(totalSumDay3, fruitPriceDay3['Apple'], fruitPriceDay3['Pears'], fruitPriceDay3['Oranges'] )
#sample of dict = 1 : {'oranges': 0, 'apple': 0, 'pears': 0}..70 : {'oranges': 8, 'apple': 26, 'pears': 13}
print graph

CEVAP
8 EKİM 2011, CUMARTESİ


Grafik teorisi ve olasılık birleştireceğiz:

1. gün, tüm olası çözümleri bir dizi inşa. Çözümler belirtmek=A1 olarak ayarlamanızı sağlar{a1(1), a1(2),...,a1(n)}.

İkinci gün tekrar solutions A2 set inşa edebilirsiniz.

Şimdi, her öğe için A2, A1 her öğe (verilen x% tolerans) dan ulaşılabilir olmadığını kontrol etmek gerekir. Eğer öyleyse - A1(m), A2(n) bağlayın. Eğer A1 herhangi bir düğüm(m) dan ulaşılabilir eğer bu düğüm silebilirsiniz.

Temelde bağlı yönettiği döngüsel bir grafik inşa ediyoruz.

Grafikte tüm yollar aynı derecede muhtemeldir. Tek bir kenar var sadece kesin bir çözüm Am 1 (Am 1 için bir düğüm Ben bir düğümden) dan bulabilirsiniz.

Tabii, bazı düğümlerin diğer düğümlere göre daha fazla yol görünür. Her düğüm için bu düğümü olasılık içeren yollar sayısına göre doğrudan sonuca varılabilir.

Bu düğüm giden yolları sayısına eşit olan her düğüm, bir kilo atayarak, tüm geçmişi tutmak gerekir, ama sadece bir önceki gün diye bir şey yok.

Ayrıca, non-negative-values linear diphantine equations - Bir süre önce sorulan Bir soruya bakalım. Kabul cevabı her adımda tüm kombinasyonları enumarte için harika bir yoldur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • max2sims2

    max2sims2

    19 Kasım 2008
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012