Pertimbangkan 30 hingga 30 matriks Toeplitz yang semua entrinya adalah 0 atau 1. Tantangan ini adalah tantangan pengoptimalan sederhana untuk menemukan matriks dengan penentu terbesar yang mungkin.
Masukan Tidak Ada
Output A 30 oleh 30 Toeplitz matrix semua entri yang 0 atau 1 beserta determinannya.
Skor Penentu matriks yang Anda hasilkan. Jika dua orang mendapatkan skor yang sama, jawaban pertama menang.
Entri terkemuka sejauh ini
- 65.455.857.159.975 di Matlab oleh Nick Alger (kira-kira (10 ^ 13,8)
- 65.455.857.159.975 dalam Python oleh isaacg (kira-kira 10 ^ 13,8)
- 39.994.961.721.988 di Mathematica pada 2012 Arcampion (sekitar 10 ^ 13.6)
- 39.788.537.400.052 dalam R oleh Flounderer (sekitar 10 ^ 13,6)
- 8.363.855.075.832 dalam Python oleh Vioz- (kira-kira 10 ^ 12.9)
- 6.984.314.690.903 di Julia oleh Alex A. (sekitar 10 ^ 12,8)
Mengganggu kendala tambahan 16 Juli 2015
Jika memungkinkan, silakan gunakan aritmatika arbitrer atau presisi tinggi untuk menghitung penentu hasil akhir sehingga kita dapat yakin apa itu sebenarnya (harus selalu berupa bilangan bulat). Dengan python ini seharusnya bermanfaat.
code-challenge
math
optimization
Komunitas
sumber
sumber
Jawaban:
Matlab, 65.455.857.159.975 (10 ^ 13,8159)
Metode ini adalah pendakian gradien di bagian dalam kubus [0,1] ^ 59, dengan banyak tebakan awal acak, dan pembulatan pada akhirnya untuk membuat semuanya nol dan satu.
Matriks:
Kode:
Matematika di balik menghitung gradien:
Dalam produk dalam elemen (Ie., Produk dalam Hilbert-Schmidt), gradien penentu memiliki perwakilan Riesz G yang diberikan oleh
G = det (A) A ^ (- *).
Peta, J, dari variabel optimisasi (nilai diagonal) ke matriks toeplitz linier, sehingga gradien keseluruhan g adalah komposisi dari dua peta linier ini,
g = (vec (G) * J) ',
di mana vec () adalah operator vektorisasi yang mengambil matriks dan membukanya menjadi vektor.
Pendakian gradien interior:
Setelah ini yang harus Anda lakukan adalah memilih vektor awal dari nilai diagonal w_0, dan untuk beberapa langkah kecil ukuran iterasi iterate:
w_proposed = w_k + alpha * g_k
untuk mendapatkan w_ (k + 1), ambil w_proposed dan memotong nilai di luar [0,1] hingga 0 atau 1
ulangi sampai puas, lalu bulatkan semuanya menjadi 0 atau 1.
Hasil saya mencapai penentu ini setelah melakukan sekitar 80.000 percobaan dengan tebakan awal acak yang seragam.
sumber
Python 2 dengan Numpy, 65.455.857.159.975 ~ = 10 ^ 13.8
Ini adalah pendakian bukit, semudah mungkin. Perhitungan penentu akhir dilakukan menggunakan SymPy untuk menentukan hasil yang tepat. Semua matriks yang ditemukan dengan determinan ini adalah sirkuler.
Matriks yang ditemukan dengan determinan ini, diberikan sebagai nilai diagonal dari kiri bawah ke kanan atas:
Yang pertama, sebagai matriks:
Kode:
sumber
R, 39 788 537 400 052
Ini adalah usaha saya untuk melakukan algoritma genetika tetapi hanya dengan reproduksi aseksual. Saya harap saya memahami tantangan dengan benar. Sunting: mempercepat sedikit, mencoba benih acak yang berbeda, dan dibatasi hingga 100 generasi.
Keluaran:
sumber
Julia, 6.984.314.690.902,998
Ini hanya membangun 1.000.000 matriks Toeplitz acak dan memeriksa faktor penentu mereka, mencatat maksimum yang ditemui. Semoga seseorang akan datang dengan solusi analitis yang elegan, tetapi sementara itu ...
Anda dapat melihat hasilnya di sini .
sumber
Mathematica, 39.994.961.721.988 (10 ^ 13,60)
Metode optimasi anil simulasi sederhana; belum ada optimasi atau penyetelan.
Output sampel:
sumber
Python 2, 8 363 855 075 832
Ini memiliki strategi yang sangat mendasar, hampir tidak ada yang terlibat.
Ini adalah matriks terbaik yang ditemukan setelah ~ 5.580.000 percobaan:
Masih berjalan ...
sumber