สำหรับโครงการของฉันฉันใช้แผนที่ Henon เพื่อสร้าง (หลอก) - จำนวนสุ่ม ฉันใช้รหัสต่อไปนี้เพื่อสร้างเมทริกซ์ของ (หลอก) - ตัวเลขสุ่ม
def create_by_henonmap (มิติ, คีย์):
    x = คีย์[0]
    y = คีย์[1]
    # จำนวนรวมของ bitSequence ที่ผลิต
    ลำดับขนาด = มิติ * มิติ * 8
    bitSequence = [] # แต่ละ bitSequence ประกอบด้วย 8 บิต
    byteArray = [] # แต่ละ byteArray มี m bitSequence
    Matrix = [] # แต่ละ Matrix มี m*n byteArray
    สำหรับฉันในช่วง (sequenceSize):
        # แผนที่คลาสสิก Henon มีค่า a = 1.4 และ b = 0.3
        xN = y + 1 - 1.4 * x**2
        yN = 0.3 * x
        x = xN
        y = วาย
        ถ้า xN <= 0.4:
            บิต = 0
        อื่น:
            บิต = 1
        พยายาม:
            bitSequence.append(บิต)
        ยกเว้น:
            bitSequence = [บิต]
        ถ้าฉัน % 8 == 7:
            ทศนิยม = ธ.ค. (bitSequence)
            พยายาม:
                byteArray.append (ทศนิยม)
            ยกเว้น:
                byteArray = [ทศนิยม]
            บิตลำดับ = []
        byteArraySize = มิติ * 8
        ถ้าฉัน % byteArraySize == byteArraySize-1:
            พยายาม:
                Matrix.append(byteArray)
            ยกเว้น:
                เมทริกซ์ = [byteArray]
            ไบต์อาร์เรย์ = []
    กลับเมทริกซ์
ก่อนที่ฉันจะใช้โค้ดนี้ในการผลิต ฉันจะทดสอบการสุ่มโดยชุดทดสอบ NIST จาก นี้ แต่ได้ผลลัพธ์นี้:
การทดสอบที่มีสิทธิ์จาก NIST-SP800-22r1a:
-โมโนบิต
-frequency_within_block
วิ่ง
-longest_run_ones_in_a_block
-dft
-non_overlapping_template_matching
- อนุกรม
-around_entropy
- ผลรวมสะสม
-random_excursion
-random_excursion_variant
ผลการทดสอบ:
- ผ่าน - คะแนน: 0.525 - Monobit - เวลาที่ผ่านไป: 0 ms
- ผ่าน - คะแนน: 0.999 - ความถี่ภายในบล็อก - เวลาที่ผ่านไป: 0 ms
- ล้มเหลว - คะแนน: 0.0 - เรียกใช้ - เวลาที่ผ่านไป: 1 ms
- FAILED - คะแนน: 0.002 - คนที่วิ่งนานที่สุดในบล็อก - เวลาที่ผ่านไป: 0 ms
- ล้มเหลว - คะแนน: 0.004 - การแปลงฟูเรียร์แบบไม่ต่อเนื่อง - เวลาที่ผ่านไป: 2 ms
- ผ่าน - คะแนน: 0.899 - การจับคู่เทมเพลตที่ไม่ทับซ้อนกัน - เวลาที่ผ่านไป: 8 ms
- ล้มเหลว - คะแนน: 0.0 - อนุกรม - เวลาที่ผ่านไป: 54 ms
- ล้มเหลว - คะแนน: 0.0 - เอนโทรปีโดยประมาณ - เวลาที่ผ่านไป: 102 ms
- ผ่าน - คะแนน: 0.887 - ผลรวมสะสม - เวลาที่ผ่านไป: 4 ms
- ล้มเหลว - คะแนน: 0.11 - การสุ่มตัวอย่าง - เวลาที่ผ่านไป: 28 ms
- ผ่าน - คะแนน: 0.678 - Random Excursion Variant - เวลาที่ผ่านไป: 1 ms
ฉันคิดว่าแผนที่ Chaotic สามารถสร้างการสุ่มได้เพียงพอ แต่ผลลัพธ์ที่ได้นั้นน่าผิดหวังมาก มีข้อผิดพลาดเชิงตรรกะภายในโค้ดที่สร้างผลลัพธ์ที่ไม่ดีนี้หรือไม่ ฉันเดาว่าวิธีที่มันสร้างลำดับบิตของตัวเลขทำให้เกิดปัญหา
        ถ้า xN <= 0.4:
            บิต = 0
        อื่น:
            บิต = 1
มีการใช้งานแผนที่อลหม่านเพื่อสร้าง (หลอก) - จำนวนสุ่มที่ดีกว่านี้หรือไม่?