Kapanana Kadar F9'a Basın - Excel İpuçları

Herhangi Bir Karmaşık Modeli Çözmek İçin Excel'i Kullanma

Lev, rekabetçi bir yüzme liginin komisyon üyesidir. Şöyle yazıyor: "Yüzme liginin komiseri benim. Bu yıl sekiz takım var. Her takım bir karşılaşmaya ev sahipliği yapıyor ve ev sahibi takım. Bir karşılaşmada 4 veya 5 takım olacak. Her takımın karşı yüzmesi için program nasıl düzenlenir Geçmişte 5, 6 veya 7 takımımız varken, kapanana kadar F9'a basarak çözebiliyordum. Ama bu sene 8 takımla çıkmıyor. "

Kısıtlamalardan biri, bazı havuzların yalnızca 4 şerit sunmasıdır, bu nedenle bu havuz galaya ev sahipliği yaptığında yalnızca 4 takıma sahip olabilirsiniz. Diğer havuzlar için 5, 6 veya daha fazla şeritleri olabilir, ancak ideal karşılaşmada ev sahibi takım ve dört kişi daha olacaktır.

Önerim: F9'a daha hızlı basın! Buna yardımcı olmak için: modelinizde bir "yakınlık ölçüsü" geliştirin. Bu şekilde, F9'a bastığınızda, gözünüzü tek bir numarada tutabilirsiniz. Bulduğunuzdan daha "daha iyi" bir çözüm bulduğunuzda, bunu ara en iyi çözüm olarak kaydedin.

Yüzme Sorununa Özgü Adımlar

  • En üstteki 8 ev sahibi takımı listeleyin.
  • Diğer 4 şeridi doldurmanın kaç yolu var?
  • Tüm yolları listeleyin.
  • Diğer 3 şeridi doldurmanın kaç yolu (küçük mekanlar için?). Tüm yolları listeleyin.
  • RANDBETWEEN(1,35)Her maç için takım seçmek için kullanın .

Sezonu düzenlemenin 35 8 olası yolu olduğunu unutmayın (2,2 trilyon). Bunların hepsini bir ev bilgisayarı ile yapmak "imkansız" olurdu. Yalnızca 4000 olasılık olsaydı, hepsini yapabilirdiniz ve bu başka bir gün için bir video. Ancak 2,2 trilyon olasılıkla rastgele tahmin etmenin çözüm bulma olasılığı daha yüksektir.

Bir Yakınlık Ölçüsü Geliştirin

Yüzme senaryosunda en önemli şey, her takım diğer takımlara karşı iki kez mi yüzüyor?

Mevcut 8 rastgele sayıyı alın ve tüm eşleşmeleri belirlemek için formülleri kullanın. 28 olası eşleşmeyi listeleyin. COUNTIFMevcut rastgele sayılarla her eşleşmenin kaç kez gerçekleştiğini görmek için kullanın . Kaçının 2 veya daha büyük olduğunu sayın. Amaç bu sayıyı 28'e çıkarmak.

İkincil Hedef: 28 eşleşme var. Her birinin iki kez olması gerekiyor. Bu gerçekleşmesi gereken 56 eşleşme. 8 havuz ve beş şeritli 6 havuz ile 68 eşleşme gerçekleşecek. Bu, bazı takımların diğer takımlara 3 kez ve muhtemelen 4 kez yüzeceği anlamına gelir. İkincil hedef: Mümkün olduğunca az sayıda takımın 4 maça sahip olduğundan emin olun. Üçüncül hedef: Maks.

Bunu Çözmenin Yavaş Yolu

F9'a basın. Sonuca bak. Hangi sonuçları aldığınızı görmek için F9'a birkaç kez basın. Yüksek bir sonuç aldığınızda, 8 girişi ve üç çıkış değişkenini kaydedin. Daha iyi bir sonuç elde edene kadar F9'a basmaya devam edin. 8 giriş hücresini ve 3 sonuç hücresini kaydederek bunu kaydedin.

Mevcut Sonucu Kaydetmek İçin Makro

Bu makro, sonuçları bir sonraki satıra kaydeder.

Sub SaveThis() NR = Range("Z1048576").End(xlUp).Row + 1 Cells(NR, 26).Resize(1, 11).Value = Array(Range("c8").Value, _ Range("D8").Value, Range("E8").Value, Range("F8").Value, _ Range("G8").Value, Range("H8").Value, Range("I8").Value, _ Range("J8").Value, Range("O1").Value, Range("P1").Value, _ Range("Q1").Value) End Sub

F9'a Tekrar Tekrar Basmak ve Sonuçları Kontrol Etmek İçin Makro

Yalnızca "daha iyi" çözümleri günlüğe kaydederek F9'a art arda basmak için bir makro yazın. İstenilen 28 ve 0 sonuçlarına ulaştığınızda makroyu durdurun.

Sub TrySome() NR = Range("Z1048576").End(xlUp).Row + 1 Ctr = Range("T1").Value Application.ScreenUpdating = Range("AH2").Value SolutionFound = False GoAgain: ActiveSheet.Calculate Ctr = Ctr + 1 UseIt = 0 If Range("O1").Value> Range("AK1").Value Then UseIt = 1 ElseIf Range("O1").Value = Range("AK1").Value Then If Range("P1").Value 300 Then Application.ScreenUpdating = True Exit Sub End If If SolutionFound = True Then Application.ScreenUpdating = True Exit Sub End If If Ctr Mod 1000 = 0 Then Range("T1").Value = Ctr Application.ScreenUpdating = True If Selection.Address = "$T$1" Then Cells(NR, 34).Select Else Range("T1").Select End If Application.ScreenUpdating = Range("AH2").Value End If GoTo GoAgain End Sub

ScreenUpdating hakkında kenar çubuğu

Kenar çubuğu: İlk başta, yinelemeleri izlemek "eğlencelidir". Ama sonunda milyonlarca olasılığı test etmeniz gerekebileceğini anlarsınız. Excel'in ekranı yeniden çizmesi makroyu yavaşlatır. Application.ScreenUpdating = False, ekranı yeniden boyamamak için kullanın.

Her yeni yanıt aldığınızda veya her 1000'de bir, bırakın Excel ekranı yeniden çizsin. Sorun: Excel, hücre işaretçisi hareket etmedikçe ekranı yeniden çizmiyor. ScreenUpdating True iken yeni bir hücre seçerek Excel'in ekranı yeniden boyadığını buldum. Sayaç hücresi ile Şimdiye Kadarki En İyi Sonuçlar arasında değişmesine karar verdim.

Application.ScreenUpdating = True If Selection.Address = "$T$1" Then Cells(NR, 34).Select Else Range("T1").Select End If Application.ScreenUpdating = Range("AH2").Value

Alternatif Çözme Çözümleri

Bu video için pek çok başlık düşündüm: Kapanana Kadar F9'a Basın, Düzeltene Kadar Tahmin Et, Kaba Kuvvet Çözme, Yakınlık Ölçüsü

Sorunu çözmek için Çözücü kullanmayı denediğime dikkat edin. Ancak Çözücü yaklaşamadı. Gol 28 olduğunda 26 takımdan daha iyi olamazdı.

Ayrıca bu videoda bulduğum herhangi bir çözümün "aptalca şans" olduğunu unutmayın. Çözme yöntemi hakkında akıllıca bir şey yok. Örneğin makro, "Şimdiye kadarki en iyi çözümden başlamalıyız ve bazı mikro ayarlamalar yapmalıyız" demez. Sadece bir numara uzakta bir çözüm bulsanız bile, F9'a tekrar körü körüne basar. Soruna saldırmanın daha akıllıca bir yolu olabilir. Ama… şu anda… yüzme komiserimiz için bu yaklaşım işe yaradı.

Çalışma Kitabını İndirin

Video izle

Dosyayı indir

Örnek dosyayı buradan indirin: Podcast2180.zip

Ilginç makaleler...