मैं यादृच्छिक संख्या जेनरेटर के लिए पार्किंग लॉट परीक्षण के कार्यान्वयन को लिखने की कोशिश कर रहा हूं। यहां स्रोत हैं कि मुझे परीक्षण के बारे में मेरी जानकारी मिल रही है: Intel math library documentation और Page 4 of this paper संभाव्यता घनत्व के लिए phi फ़ंक्शन के साथ here सूचीबद्ध है।खराब परिणाम उत्पन्न करने वाले यादृच्छिक संख्या जेनरेटर के लिए पार्किंग लॉट परीक्षण का मेरा कार्यान्वयन क्यों है?
मैंने सी # में परीक्षण का कार्यान्वयन लिखा था। यह 100x100 ग्रिड का उपयोग करता है जिसका मूल्य प्रारंभ में शून्य पर सेट होता है। मैं फिर एक्स और वाई के लिए यादृच्छिक पूर्णांक उत्पन्न करने के लिए यादृच्छिक संख्या जेनरेटर का उपयोग करता हूं। यदि ग्रिड और उसके पड़ोसियों का वह सूचकांक खाली है, तो वह सूचकांक 1 पर सेट हो जाता है। अन्यथा, कुछ भी नहीं होता क्योंकि "क्रैश" होता था।
मैंने इसे सी # सिस्टम का उपयोग करके चलाया। यादृच्छिक जनरेटर। मुझे विश्वास नहीं है कि परिणाम सही हैं क्योंकि मुझे हमेशा 3079 अंक पार्क किए जाते हैं, जो मुझे प्राप्त होने वाले औसत से लगभग 500 छोटा है। यह 2.21829146215425E-90 का पी-मान भी उत्पन्न करता है।
मेरा कोड नीचे है। क्या किसी के पास इसका कोई अनुभव है या क्या कोई ऐसा कुछ देख सकता है जो मैं अपने कार्यान्वयन में गलत तरीके से कर रहा हूं? किसी भी तरह की सहायता का स्वागत किया जाएगा।
private void RunParkingLotTest()
{
points = new int?[100,100];
int parked = 0;
for (int i = 0; i < 12000; i++)
{
int x = random.Next(100);
int y = random.Next(100);
if (IsSafeToPark(x, y))
{
points[x, y] = 1;
parked++;
}
}
Console.WriteLine("Parked: " + parked + "\nP value: " + PhiFunction((parked-3523)/21.9));
}
private bool IsSafeToPark(int x, int y)
{
return PointIsEmpty(x, y)
&& LeftOfPointIsEmpty(x, y)
&& RightOfPointIsEmpty(x, y)
&& BelowPointIsEmpty(x, y)
&& AbovePointIsEmpty(x, y);
}
private bool AbovePointIsEmpty(int x, int y)
{
if (y == 99)
{
return true;
}
else
return points[x, y + 1] == null;
}
private bool BelowPointIsEmpty(int x, int y)
{
if (y == 0)
{
return true;
}
else
return points[x, y - 1] == null;
}
private bool RightOfPointIsEmpty(int x, int y)
{
if (x == 99)
{
return true;
}
else
return points[x + 1, y] == null;
}
private bool LeftOfPointIsEmpty(int x, int y)
{
if (x == 0)
{
return true;
}
else
return points[x - 1, y] == null;
}
private bool PointIsEmpty(int x, int y)
{
return points[x, y] == null;
}
private double PhiFunction(double x)
{
//ϕ(x) = (2π)−½e−x2/2
return ((1/Math.Sqrt(2 * Math.PI)) * Math.Exp(-(Math.Pow(x, 2))/2));
}
संपादित करें - अपने मूल कार्यान्वयन से जुड़ी समस्याओं थे
- मैं डिस्क
- मैं केवल पूर्णांक मूल्यों पर अंक साजिश रची साजिश रचने के बजाय चौकोर था। मुझे इसके बजाय दशमलव मानों का उपयोग करना चाहिए था।
- उपरोक्त दो का एक परिणाम के रूप में, मैं अपने दूरी की जांच यह पता लगाना में मदद के लिए क्रिस सिंक्लेयर और मेरा जेड को
धन्यवाद बदलने के लिए की जरूरत है। अंतिम कोड नीचे पोस्ट किया गया है।
क्या आप कोड पोस्ट कर सकते हैं जहां आप परिवर्तनीय ** यादृच्छिक ** में प्रवेश करते हैं? –
यादृच्छिक यादृच्छिक = नया यादृच्छिक(); मैं सी # सिस्टम का उपयोग कर रहा हूँ। यादृच्छिक वर्ग। यह डिफ़ॉल्ट (समय आधारित) बीज मान का उपयोग कर रहा है। –
हो सकता है कि आप एक स्टोर की कोशिश कर सकें जो ** यादृच्छिक ** स्थिर सामग्री के रूप में हो ताकि सभी बीज उसी बीज का उपयोग करके उत्पन्न हो जाएं। –