Vajutage klahvi F9 kuni sulgemiseni - Exceli näpunäited

Exceli kasutamine mis tahes keeruka mudeli lahendamiseks

Lev on konkurentsivõimelise ujumisliiga volinik. Ta kirjutab: "Olen ujumisliiga volinik. Sel aastal on kaheksa meeskonda. Iga meeskond korraldab ühe kohtumise ja on kodumeeskond. Kohtumisel on 4 või 5 meeskonda. Kuidas korraldada ajakava nii, et iga meeskond ujuks vastu iga teine ​​meeskond kaks korda? Varem, kui meil oli 5, 6 või 7 meeskonda, suutsin selle lahendada, vajutades sulgemisklahvi F9. Kuid sel aastal ei tule see 8 meeskonnaga välja. "

Üks piirang on see, et mõned basseinid pakuvad ainult 4 rada, nii et teil võib olla ainult 4 meeskonda, kui see bassein korraldab galat. Teiste basseinide jaoks võib neil olla 5, 6 või rohkem rada, kuid ideaalsel kohtumisel on kodumeeskond pluss veel neli.

Minu ettepanek: vajutage kiiremini klahvi F9! Selle aitamiseks: töötage oma mudelis välja "läheduse mõõt". Nii saate klahvi F9 vajutades hoida silma peal ühel numbril. Kui leiate "parema" lahenduse kui parim, mille olete leidnud, salvestage see parima vahepealse lahendusena.

Ujumisprobleemile omased sammud

  • Nimekirja tippu kuuluvad 8 kodumeeskonda.
  • Mitu viisi ülejäänud 4 sõidurada täita?
  • Loetlege kõik viisid.
  • Mitu viisi ülejäänud 3 sõidurada täita (väikeste kohtade jaoks?). Loetlege kõik viisid.
  • Kasutage RANDBETWEEN(1,35)igaks mänguks meeskondade valimiseks.

Pange tähele, et hooaja korraldamiseks on 35 8 võimalikku viisi (2,2 triljonit). Koduarvutiga oleks neid kõiki võimatu teha. Kui võimalusi oleks ainult 4000, saaksite neid kõiki teha ja see on video teiseks päevaks. Kuid 2,2 triljoni võimaluse korral leiab juhuslikult arvamine tõenäolisema lahenduse.

Töötage välja läheduse mõõt

Ujumisstsenaariumi puhul on kõige olulisem Kas iga meeskond ujub iga teise meeskonna vastu kaks korda?

Võtke praegused 8 juhuslikku numbrit ja kasutage valemeid, et joonistada kõik vasted. Loetlege 28 võimalikku matši. Kasutage, COUNTIFet näha, mitu korda toimub iga matš praeguste juhuslike arvudega. Loendage, kui palju on 2 või rohkem. Eesmärk on see number saada 28-ni.

Sekundaarne eesmärk: kokku on 28 matši. Igaüks peab juhtuma kaks korda. See on 56 matši, mis peavad juhtuma. 8 basseini ja 6 viie rajaga on teil 68 matši. See tähendab, et mõned meeskonnad ujuvad teiste meeskondade vastu 3 korda ja võib-olla 4 korda. Teisene eesmärk: veenduge, et võimalikult vähestel võistkondadel oleks 4 matši. Kolmanda taseme eesmärk: minimeerida maksimaalne

Aeglane viis selle lahendamiseks

Vajutage klahvi F9. Vaadake tulemust. Vajutage paar korda klahvi F9, et näha, milliseid tulemusi saate. Kõrge tulemuse saavutamisel salvestage 8 sisendit ja kolm väljundmuutujat. Vajutage klahvi F9, kuni saate parema tulemuse. Salvestage see, salvestades 8 sisend- ja 3 lahtrit.

Makro praeguse tulemuse salvestamiseks

See makro salvestab tulemused järgmisele reale.

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

Makro, et vajutada korduvalt klahvi F9 ja kontrollida tulemusi

Kirjutage makro, et vajutada korduvalt klahvi F9, logides ainult "paremad" lahendused. Laske makrol peatuda, kui jõuate 28 ja 0 soovitud tulemusteni.

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

Külgriba ekraanipildi värskendamise kohta

Külgriba: Algul on "lõbus" vaadata korduste veeremist. Kuid lõpuks mõistate, et peate võib-olla katsetama miljoneid võimalusi. Kui lasete Excelis ekraani uuesti joonistada, aeglustub makro. Ekraani ülevärvimiseks kasutage rakendust Application.ScreenUpdating = Vale.

Iga kord, kui saate uue vastuse või iga 1000, laske Excelil ekraan uuesti joonistada. Probleem: Excel ei joonista ekraani ümber, kui lahtrikursor ei liigu. Leidsin, et valides uue lahtri, kui ScreenUpdating on tõene, värvib Excel ekraani uuesti. Otsustasin, et lasen vaheldumisi loendurirakul ja seni parimatel tulemustel.

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

Alternatiivsed lahendused

Kaalusin selle video jaoks paljusid pealkirju: vajutage klahvi F9 kuni sulgemiseni, arvake kuni korrektseni, jõhkra jõu lahendamine, läheduse mõõt

Pange tähele, et proovisin probleemi lahendamiseks kasutada lahendust Solver. Kuid Solver ei saanud lähedale. See ei läinud kunagi paremaks kui 26 meeskonda, kui eesmärk oli 28.

Pange tähele ka seda, et mis tahes lahendus, mille ma selles videos saan, on "loll-õnne". Lahendusmeetodis pole midagi intelligentset. Näiteks ei ütle makro: "Peaksime lähtuma senisest parimast lahendusest ja tegema mõned mikrokohandused." Isegi kui saate lahenduse, mis on vaid ühe numbri kaugusel, vajutab see uuesti pimesi F9. Tõenäoliselt on probleemi lahendamiseks intelligentsem viis. Kuid … praegu … meie ujumisvoliniku jaoks see lähenemine toimis.

Laadige alla töövihik

Vaata videot

Laadige fail alla

Laadige näidisfail alla siit: Podcast2180.zip

Huvitavad Artiklid...