Nospiediet F9 līdz aizvēršanai - Excel padomi

Izmantojot Excel, lai atrisinātu jebkuru sarežģītu modeli

Lēvs ir konkurētspējīgas peldēšanas līgas komisārs. Viņš raksta: "Es esmu peldēšanas līgas komisārs. Šogad ir astoņas komandas. Katra komanda rīko vienu tikšanos un ir mājas komanda. Sanāksmē būs 4 vai 5 komandas. Kā organizēt grafiku, lai katra komanda peldētu pret katru otro komandu divreiz? Agrāk, kad mums bija 5, 6 vai 7 komandas, es to varēju atrisināt, nospiežot F9 līdz noslēgumam. Bet šogad ar 8 komandām tas neiznāk. "

Viens no ierobežojumiem ir tāds, ka daži baseini piedāvā tikai 4 joslas, tāpēc jums var būt tikai 4 komandas, kad šis baseins rīko galu. Attiecībā uz citiem baseiniem tiem varētu būt 5, 6 vai vairāk joslu, bet, ja tiekas, ideālā gadījumā mājinieki un četri citi.

Mans ieteikums: Nospiediet F9 ātrāk! Lai to palīdzētu: izstrādājiet savā modelī "tuvuma mēru". Tādā veidā, nospiežot F9, varat sekot vienam skaitlim. Atrodot "labāku" risinājumu nekā labākais, ko atradāt, saglabājiet to kā labāko starpposma risinājumu.

Peldēšanas problēmai raksturīgie soļi

  • Uzskaitiet 8 mājas komandas, kas atrodas augšpusē.
  • Cik daudz veidu, kā aizpildīt pārējās 4 joslas?
  • Uzskaitiet visus veidus.
  • Cik daudz veidu, kā aizpildīt pārējās 3 joslas (mazām vietām?). Uzskaitiet visus veidus.
  • Izmantojiet, RANDBETWEEN(1,35)lai izvēlētos komandas katram mačam.

Ņemiet vērā, ka ir 35 8 iespējamie sezonas sakārtošanas veidi (2,2 triljoni). Būtu "neiespējami" tos visus izdarīt ar mājas datoru. Ja būtu tikai 4000 iespējas, jūs varētu darīt visas, un tas ir video citai dienai. Bet ar 2,2 triljoniem iespēju, nejauši uzminot, visticamāk tiks atrasti risinājumi.

Izstrādājiet tuvuma mēru

Peldēšanas scenārijā vissvarīgākais ir tas, vai katra komanda peld divas reizes pret katru otro komandu?

Paņemiet pašreizējos 8 nejaušos skaitļus un izmantojiet formulas, lai uzzīmētu visus savstarpējos mačus. Uzskaitiet 28 iespējamās spēles. Izmantojiet, COUNTIFlai redzētu, cik reizes katrs mačs notiek ar pašreizējiem izlases skaitļiem. Saskaitiet, cik ir 2 vai vairāk. Mērķis ir panākt, lai šis skaitlis būtu 28.

Sekundārais mērķis: Ir 28 saspēles. Katram jānotiek divreiz. Tas ir 56 spēles, kurām jānotiek. Ar 8 baseiniem un 6 ar piecām joslām jums būs 68 spēles. Tas nozīmē, ka dažas komandas peldēs pret citām komandām 3 reizes un, iespējams, 4 reizes. Sekundārais mērķis: Pārliecinieties, ka pēc iespējas mazāk komandām ir 4 savstarpēji mači. Terciārais mērķis: samaziniet maksimālo

Lēns veids, kā to atrisināt

Nospiediet F9. Paskaties uz rezultātu. Dažas reizes nospiediet F9, lai redzētu, kādus rezultātus jūs saņemat. Kad jūs saņemat augstu rezultātu, saglabājiet 8 ievades un trīs izejas mainīgos. Turpiniet nospiest F9, līdz iegūstat labāku rezultātu. Saglabājiet to vienu, ierakstot 8 ievades šūnas un 3 rezultātu šūnas.

Makro, lai saglabātu pašreizējo rezultātu

Šis makro saglabā rezultātus nākamajā rindā.

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, lai atkārtoti nospiestu F9 un pārbaudītu rezultātus

Uzrakstiet makro, lai atkārtoti nospiestu F9, reģistrējot tikai "labākus" risinājumus. Ļaujiet makro apstāties, kad esat sasniedzis vēlamos 28. un 0. rezultātus.

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

Sānjosla par ekrāna atjaunināšanu

Sānjosla: Sākumā ir "jautri" skatīties, kā atkārtojumi rit. Bet jūs galu galā saprotat, ka, iespējams, nāksies pārbaudīt miljoniem iespēju. Ja Excel pārzīmē ekrānu, makro palēninās. Izmantojiet Application.ScreenUpdating = False, lai nepārkrāsotu ekrānu.

Katru reizi, kad saņemat jaunu atbildi vai ik pēc 1000, ļaujiet Excel pārzīmēt ekrānu. Problēma: Excel nepārzīmē ekrānu, ja vien šūnu rādītājs nepārvietojas. Es atklāju, ka, atlasot jaunu šūnu, kamēr ScreenUpdating ir taisnība, Excel pārkrāsos ekrānu. Es nolēmu likt tai pārmaiņus skaitīt skaitītāju un līdz šim labākos rezultātus.

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

Alternatīvi risināšanas risinājumi

Es apsvēru daudzus šī videoklipa nosaukumus: Nospiediet F9 līdz aizvēršanai, Uzminiet līdz pareizai, Brutālu spēku risināšana, Tuvuma mērs

Ņemiet vērā, ka mēģināju izmantot Solver, lai atrisinātu problēmu. Bet Solver nevarēja tuvoties. Tas nekad nav kļuvis labāks par 26 komandām, kad mērķis bija 28.

Ņemiet vērā arī to, ka jebkurš risinājums, ko es saņemu šajā videoklipā, ir “mēma veiksme”. Risināšanas metodē nav nekā inteliģenta. Piemēram, makro nav teikts: "Mums vajadzētu sākt no līdz šim labākā risinājuma un veikt dažas mikrokorekcijas." Pat ja jūs saņemat risinājumu, kas atrodas tikai viena skaitļa attālumā, tas atkal akli nospiež F9. Iespējams, ir daudz saprātīgāks veids, kā uzbrukt problēmai. Bet … tieši tagad … mūsu peldēšanas komisāram šī pieeja darbojās.

Lejupielādējiet darbgrāmatu

Skatīties video

Lejupielādēt failu

Lejupielādējiet faila paraugu šeit: Podcast2180.zip

Interesanti raksti...