Cara membuat excel solver berjalan lebih cepat

Saya memiliki spreadsheet Excel yang berisi model dinamika kendaraan 5 DOF diferensial linier. Saya menggunakan pemecah bawaan dalam satu lingkaran untuk menyelesaikan persamaan secara numerik. Saya menggunakannya secara kualitatif untuk sementara waktu, tetapi kemudian untuk mencari akurasi yang lebih tinggi, saya perlu mengurangi langkah waktu secara drastis. Ini menyoroti kebutuhan untuk meningkatkan kecepatan makro dan meninjau potongan kode yang ditulis dengan tergesa-gesa

Dengan menggunakan fungsi Timer, saya dapat membuat pengaturan pemecah dan menyelesaikan waktu, jadi saya kemudian mulai mencoba mengurangi waktu yang dibutuhkan untuk setiap putaran. Perbaikan yang saya terapkan adalah

  • Menonaktifkan pembaruan layar
  • Mengatur perhitungan sheet ke manual dan hanya memperbarui baris yang diperlukan
  • Menonaktifkan pembaruan bilah status
  • Mematikan aktifkan acara
  • Menggunakan mesin Simplex LP
  • Mengurangi presisi penyelesaian yang diperlukan
  • Menggunakan hasil dari langkah waktu sebelumnya sebagai titik awal untuk baris berikutnya
  • Memindahkan semua kalkulasi turunan ke sheet lain sehingga hanya kalkulasi yang diperlukan saja yang diperbarui
  • Mengonfigurasi ulang spreadsheet agar baris penyelesaiannya konstan (hasilnya kemudian disalin ke baris di bawahnya), artinya pemecah hanya perlu disetel satu kali

Peningkatannya sangat besar, mengurangi waktu penyelesaian per baris dari sekitar 1. 3 ke 0. 35 detik. Waktu saat ini 0. 35 detik hampir seluruhnya menyelesaikan waktu - beberapa milidetik yang tersisa adalah waktu penyalinan

Namun, minimal 1000 baris per proses, total waktu proses masih lebih dari 16 menit. Untuk lari penuh, itu akan menjadi 85 menit

Meskipun saya senang dengan peningkatannya, modelnya masih terlihat lambat hanya dengan 5 DOF. Jadi, pertanyaan saya adalah apakah ada yang tahu jika saya dapat meningkatkan waktu penyelesaian atau dapat mengomentari apakah saya telah mencapai batas bawah untuk 5 persamaan seperti itu?

Persamaannya adalah

$$(m \cdot \dot{v})+(m \cdot rad(r) \cdot u)+(m_s \cdot h' \cdot rad(\ddot{\varphi}))+(deg(C_{

$$(I_z \cdot rad(\dot{r}))+(I_{z,s} \cdot rad(\Theta_r) - I_{xz,s}) \cdot rad(\ddot{\varphi}))

$$((I_{x,s}+(m_s \cdot h'^2)) \cdot rad(\ddot{\varphi}))+(m_s \cdot h' \cdot \dot{v})+(

  1. Keseimbangan kecepatan sudut selip depan

$$rad(\dot\alpha_f)-(v/\sigma_f)-((a \cdot rad(r))/\sigma_f)+((u \cdot \varepsilon_f \cdot rad(\varphi))/\sigma_f

  1. Keseimbangan kecepatan sudut selip belakang

$$rad(\dot\alpha_r)-(v/\sigma_r)+((b \cdot rad(r))/\sigma_r)+((u \cdot \varepsilon_r \cdot rad(\varphi))/\sigma_r

Dimana (simbol. arti [satuan];

$m$. massa [kg];

$m_s$. massa bermunculan [kg];

$u$. kecepatan maju [m/dtk]; . 8; . 76311111

$a$. CG ke gandar depan [m]; . 608; . 88

$b$. CG ke gandar belakang [m]; . 335; . 82

$C_{\alpha f}$. kekakuan menikung depan [N/deg];

$C_{\alpha r}$. kekakuan menikung belakang [N/deg];

$I_z$. yaw momen inersia [kgm^2];

$i_s$. rasio kemudi [-]; . 3;

$\varepsilon_f$. koefisien kemudi gulungan depan [-]; . 052;

$\varepsilon_r$. koefisien kemudi gulungan belakang [-]; . 18;

$\Theta_r$. kemiringan sumbu gulungan [deg]; . 914941467;

$\sigma_f$. panjang relaksasi ban samping depan [m]; . 6408; . 001

$\sigma_r$. panjang relaksasi ban samping belakang [m]; . 3952; . 001

$C_\varphi$. kekakuan gulungan total [Nm/deg];

$c_f$. kemudi kepatuhan depan [deg/N]; . 000064;

$c_r$. kemudi kepatuhan belakang [deg/N]; . 000041;

$h'$. sprung mass CG tinggi wrt roll axis [m]; . 4435;

$I_{x,s}$. momen inersia rol massa pegas [kgm^2];

$I_{xz,s}$. produk roll-yaw massa bermunculan dari inersia [kgm^2];

$I_{z,s}$. momen inersia yaw massa bermunculan [kgm^2];

$K_{\varphi}$. redaman gulungan [Nms/deg];

$t_{pf}$. jejak pneumatik depan [m]; . 0364;

$t_{pr}$. jejak pneumatik belakang [m]; . 0236;

$I_{xz}$. produk roll-yaw inersia [kgm^2];

dan terakhir, masukkan riwayat waktu

$\delta$. sudut kemudi [derajat]; . 92; . 92

Di atas saya telah menyertakan satu set nilai yang khas untuk sedan modern dan satu set nilai yang mewakili model yang sangat disederhanakan yang saya gunakan untuk berkorelasi dengan model yang berbeda dengan DOF yang lebih rendah. Kedua set dimasukkan untuk melihat apakah ada perbedaan yang signifikan dalam kecepatan penyelesaian

Input riwayat waktu dapat berupa input langkah sederhana, dengan nilai 0 derajat dari 0-0. 1 detik, lalu 22. 92 derajat dari sana dan seterusnya selama beberapa detik

Persamaannya agak kikuk karena saya ingin parameter sudut dalam derajat daripada radian

Mengapa Solver butuh waktu lama untuk Excel?

Sementara Solver menggunakan metode numerik intensif komputasi yang canggih secara internal, solver masih menghabiskan sebanyak 90% waktunya menunggu Microsoft Excel menghitung ulang lembar kerja. Therefore, any steps you can take to reduce recalculation time will favorably impact the Solver's solution time.

Mengapa Solver saya membutuhkan waktu lama?

Jika Anda menggunakan batas yang besar dan sewenang-wenang (atas atau bawah) , pemecah dapat memakan waktu yang berlebihan, atau bahkan gagal menyatu. Namun, jika Anda menyetel Inf atau -Inf sebagai batas, pemecah dapat memakan waktu lebih sedikit, dan mungkin konvergen lebih baik.

Bagaimana cara mempercepat Solver VBA?

Agak terlambat, tapi semoga saya bisa membantu. .
Selalu masukkan data Anda ke dalam variabel. Hindari membaca/menulis sel saat menjalankan kode Anda
Jika Anda harus membaca/menulis sel, lakukan secara bertahap. .
AFAIK, Anda hanya akan menggunakan 1 prosesor, alih-alih mendapatkan banyak prosesor, dapatkan lebih sedikit tetapi lebih cepat
Gunakan aplikasi eksternal (?)

Saat menggunakan Solver sel mana yang ingin Anda optimalkan?

Solver adalah program add-in Microsoft Excel yang dapat Anda gunakan untuk analisis bagaimana-jika. Gunakan Solver untuk menemukan nilai optimal (maksimum atau minimum) untuk rumus dalam satu sel — disebut sel tujuan — tunduk pada batasan, atau batasan, pada .