Soruna nihai çözüm bulduğumu iddia etmiyorum (veya bu listenin kapsamlı olduğunu), ancak akla gelen bazı olası yaklaşımları ve neden işe yarayıp yaramayacağını belirtmek istiyorum. Ayrıca, mevcut zaman damgasını bir rastgelelik kaynağı olarak kullanmanın yeterince "öngörülemez" olup olmadığı ve olasılık dağılımının belirli özelliklerinin nasıl uygulanacağı gibi teğetsel sorunları ele almayacağım - sadece kodlama kullanan çözümlerden kaçınmaya odaklanacağım.
Çözüm değil: açık kodlamaya açıkça izin verme
Bu kötü bir fikir. Bu, gözlemlenebilir olmayan bir gereksinimdir (yani, yalnızca programı çalıştırarak memnun olup olmadığını belirleyemezsiniz), bu da PPCG'de şiddetle tavsiye edilmez ve programı, gönderilerin bir doğrulamayla doğrulandığı başka bir platformda çalıştırılması durumunda imkansız olabilir. otomatik yöntem. Bunun gibi bir gereksinimle ilgili sorun, "sabit kodlama" için nesnel bir tanım bularak başlamak zorunda olmanızdır. Genel olarak, bunu denerseniz, sadece işleri daha da kötüleştireceksiniz.
Sabit kodlamayı olanaksız hale getirin
Tamamen izin veremezseniz, ancak insanların onu kullanmasını istemiyorsanız, zor kodlamayı sadece rekabetçi bir yaklaşım olmayacak şekilde tasarlamayı deneyebilirsiniz. Oluşturulması gereken nesneler, koda bir örnek yerleştirmenin geçerli çözümler rastgele üreten bir algoritma yazmaktan çok daha fazla bayt gerektireceği kadar büyük ve sıkıştırılamazsa bu mümkündür. Özel örneğinizde, bu elbette geçerli değildir, çünkü kimlik matrisleri geçerlidir ve genellikle üretilmesi kolaydır, ancak diğer sorunlar için durum böyle olmayabilir. Hedef nesneler yeterince düzensizse, büyük olasılıkla gerçek bir algoritmanın bayt sayısını etkilemeyecek, ancak sabit kodlu parçayı havaya uçuracak büyük boyutta olmalarını isteyin.
Çıktıyı parametreleştirin
Çoğu zaman, bu sorunlar, örneğinizdeki matrisin boyutu gibi bir veya daha fazla doğal parametreyle gelir. Eğer öyleyse, bu parametreyi bir girdi yapmak, sabit kodlamayı imkansız veya en azından pratik yapmak için yeterli olabilir. Bazı durumlarda, belirli bir parametre değeri için manuel olarak veya kapsamlı arama yoluyla bulunan belirli bir çözümü kodlamak kolay olabilir, ancak genel olarak bu çözümün bir örneği için basit bir kapalı form yoktur, bu nedenle kolayca rasgele girişler için varsayılan bir değer üretmek mümkündür. Yine, bahsettiğiniz örnek için durum böyle değildir, çünkü kimlik matrisi her boyutta çalışır, ancak bu ilgili sorun için en uygun çözümdürgenellikle oldukça düzensiz olduğundan, geçerli değerleri etkin bir şekilde aramadan varsayılan değere sahip olmak mümkün değildir. Varsayılan değer için kaba kuvvet aramasını önlemek için bunu bir zaman sınırı ile birleştirebilirsiniz.
Put bazı olasılık dağılımı üzerindeki kısıtlama
Tamamen kısıtsız bir olasılık dağılımından vazgeçmeye istekliyseniz , bunun üzerine, cevaplayıcılara dağıtımlarını seçerken hala çok fazla özgürlük veren, ancak zor kodlamayı zor veya imkansız hale getiren bazı kısıtlamalar koyabilirsiniz:
- Akla gelen en basit kısıtlama, olası herhangi bir çıktının belirli bir eşiğin altında olması için minimum ve maksimum olasılık arasındaki farkı gerektirmektir. Sabit kodlu bir yaklaşımın hemen hemen tüm çıktılar için neredeyse sıfır olasılığı ve varsayılan değer için 1'e yakın bir olasılığı olacaktır. Maksimum farkın 0,1'in altında olmasını istiyorsanız, yaklaşımı bir seçenek haline getirmek için 10 (rastgele seçilmiş) varsayılan değerin olması gerekir. Benzer şekilde, her olası çıkış için minimum bir olasılığa ihtiyacınız olabilir, örneğin 1 / (2 * N *), burada N olası çıkışların sayısıdır.
- Alternatif olarak, dağıtımda (olasılık) boşluk olmamasını isteyebilirsiniz, böylece hem daha yüksek hem de daha düşük olasılıklar olacak şekilde δ (sizin tarafınızdan seçilen) boyut aralığı yoktur. Bu, muhtemelen kodlama yaklaşımıyla üretilen olasılık açısından herhangi bir aykırı değer olamayacağı anlamına gelir.
Bu yaklaşımlarla ilgili asıl mesele, akıl yürütmeleri çok daha zordur, cevapların doğruluğunun kanıtlanması zordur ve deneysel olarak doğruluğu doğrulamak büyük çıktı alanları için imkansız olabilir. Yine de, program için sabit kodlamayı imkansız kılabilecek temelde gözlemlenebilir bir gereksinim sağlarlar.
Varsayılan olmayan değerlerin olasılığını artırmanın bir yolu, varsayılan değere geri dönmeden önce rastgele bir foo bulmaya çalışmaktır.