Condividi:        

Calcolo combinatorio

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Calcolo combinatorio

Postdi Karistotele » 18/02/12 11:15

Ciao,
a partire da A3 a scendere ho le prime 22 lettere dell’alfabeto inglese. Usando = combinazione (22;2) esse risultano avere 231 disposizioni semplici. Vorrei disporre le combinazioni raggrupate per 11 righe e 231 colonne.

…. meglio se posto un file
http://www.filedropper.com/cnk_1

Grazie
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Sponsor
 

Re: Calcolo combinatorio

Postdi Anthony47 » 18/02/12 12:33

Bentornato...
Mi hai confuso: se ci sono 231 combinazioni, come facciamo a riempire 11*231 celle? In aggiunta: nel testo scrivi che vuoi compilare 231 colonne, sul foglio allegato scrivi "Fino a 231 righe".
Aspettiamo quindi un utile supplemento di specifiche :)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolo combinatorio

Postdi Flash30005 » 18/02/12 12:37

Il Calcolo Combinatorio con ripetizioni è
N! / (N-K)!
Quindi
22! / 20! = 462
e Senza ripetizioni
22! / 20! / 2!
quindi 231 (totali)

Come vorresti distribuire queste 231 celle, tutte su una colonna, occupando 231 righe,
oppure su 11 colonne e 21 righe?

Ciao

Ops... (Ciao Anthony; vedi messaggio sopra)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 13:46

22 lavoratori sono disposti a coppia in 11 banchi.

Analizzando diverse serie storiche ho rilevato che una delle variabili per valutare il rendimento produttivo giornaliero, le disposizioni dei lavoratori, scende di una certa percentuale se le coppie di lavoratori tendono a stabilizzarsi.

Variando invece giornalmente le posizioni delle coppie noto che la percentuale produttiva (per questa variabile) rientra sotto controllo statistico.

Le possibili combinazioni nei banchetti di lavoro sono 231

=combinazione(22;2)

Dato l’elenco dei lavoratori, rapprentati dalle lettere dell’alfabeto inglese disposto in A1:A22 vorrei tutte le 231 combinazioni raggruppate a 2 a 2 (negli 11 banchi di lavoro) in un intervallo di 11 colonne x 231 righe.

Immagine

Grazie per l'accoglienza Anthony. Le combinazioni, refusi a parte,sono all'interno di ogni cella.
.
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 14:13

Sono impazzito!!!
Le 231 combinazioni si esauriscono con 11 COLONNE e 21 RIGHE (come da schema dell'immagine precedente).

"STO LAVORANDO SERIAMENTE PER IL PROSSIMO ERRORE"

Ciao
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi Anthony47 » 18/02/12 15:32

Anthony ha scritto:Mi hai confuso: se ci sono 231 combinazioni, come facciamo a riempire 11*231 celle?

Karistotele ha scritto:Sono impazzito!!!
Le 231 combinazioni si esauriscono con 11 COLONNE e 21 RIGHE

E' la risposta alla mia domanda? :D :D

E quindi hai risolto, vero :?:

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 15:43

Veramente Anthony non sono neanche sicuro della mia ultima osservazione (11 colonne * 21 righe)

Dovrebbe essere 11 colonne (banchetti) * (righe fino ad ESAURIMENTO DELLE POSSIBILI COMBINAZIONI DISTINTE POSSIBILI)
Sono sinceramente confuso.

Comunque credo che tu abbia capito cosa io voglia fare.

Una macro o una impegnativa matriciale?

Sono nel pallone oggi, vedi se puoi trovarmi una soluzione. Grazie

Ciao
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 16:08

Insomma, semplifico: Dato l'elenco verticale dei lavoratori vorrei stabilire le posizioni negli 11 banchi con le 11 coppie senza lavoranti ripetuti fino ad esaurimento combinazioni.
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi Anthony47 » 18/02/12 16:24

Forse questa macro
Codice: Seleziona tutto
Sub comb11col()
Dest = "P"  '<<< la colonna dove comincera' l' elenco
'
Range(Dest & 1).Resize(1000, 11).Clear
For I = 1 To 22
    For J = I + 1 To 22
        Range(Dest & Rows.Count).Offset(0, pippo Mod 11).End(xlUp).Offset(1, 0) = _
            Range("A2").Offset(I, 0) & Range("A2").Offset(J, 0)
        pippo = pippo + 1
    Next J
Next I
End Sub

Personalizza l' istruzione marcata <<<

Fai sapere, ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 18:09

Magari fosse così semplice, grande Anthony.

Ogni persona non può avere il potere dell'ubiquismo, nè tanto meno può rimanere sola.

Le disposizioni per ogni riga devono essere univoche negli accopiamenti.

Ottengo questo:

Immagine
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi wallace&gromit » 18/02/12 18:38

ciao,
posso provare a dire la mia opinione, che magari potrà chiarire un po' le idee?

Il numero 231 rappresenta il totale delle combinazioni di 22 elementi, ma secondo me non è la risposta al quesito.

Immaginiamo che invece che di lavoratori stessimo parlando di un campionato con 22 squadre. La domanda è: quante giornate sono necessarie per un girone di andata in cui ogni squadra affronta una volta tutte le avversarie?
La risposta è 21.
Per organizzare gli accoppiamenti ci sono tanti metodi, che sicuramente Anthony e flash saprebbero esprimere in macro.
Però la mia domanda è: dopo il primo ciclo di 21 accoppiamenti è possibile ripetere lo stesso ciclo oppure è necessario che la serie di accoppiamenti sia sempre diversa (pensando al calcio: nessuna giornata rispecchia in tutte le partite quella di un girone precedente)?

Nel secondo caso il numero di probabilità diventa una cifra piuttosto astronomica (qualcosa come 2 elevato alla 22?)
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: Calcolo combinatorio

Postdi Karistotele » 18/02/12 18:53

Hai azzeccato in pieno. Complimenti. Infatti è come organizzare un torneo di calcio all'italiana MA di solo andata.

La condizione è che si possono disputare solo 11 incontri.

Questi 11 incontri vanno evidenziati in 11 colonne così come ha fatto Anthony. Poi bisogna andare giù (righe) fino ad esaurire tutte le partite possibili.

Grazie per avermi aiutato a definire bene il problema.

Ciao
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi wallace&gromit » 18/02/12 22:59

partendo dal calcio (o meglio dal fantacalcio) in rete ho trovato questo sito
http://www.stefanoguardigli.net/p_creacalendariofantacalcio.htm
che ti permette di stilare un calendario funzionante (basta selezionare 22 squadre) e scaricare l'excel creato. Poi i nomi li puoi sostituire in un secondo tempo.
Se poi qualcuno che capisce come sono stati generati gli accoppiamenti avesse la bontà di compilare e condividere una macro sarebbe una cosa molto utile per la gestione di qualsiasi tipo di torneo o comenel tuo caso di turni lavorativi
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: Calcolo combinatorio

Postdi Flash30005 » 19/02/12 08:48

Nell'impossibilità di elaborare l'insieme delle combinazioni generate da 231 elementi (coppie) in gruppi da 11
ho realizzato una macro che inizialmente crea le 231 coppie, ogni singolo elemento in colonna separata (C e D)
Poi un generatore di numero casuale trascriverà n. righe (che ho fissato a 231 ma è solo un numero esiguo)

Codice: Seleziona tutto
Sub CombinaD()
R1 = 1
Dim Vn(22) As String
For RV = 1 To 22
Vn(RV) = Range("A" & RV).Value
Next RV
Columns("C:X").ClearContents

For RR1 = 1 To 21
    For RR2 = RR1 + 1 To 22
        Cells(R1, 3).Value = Vn(RR1)
        Cells(R1, 4).Value = Vn(RR2)
        R1 = R1 + 1
        If R1 = 232 Then R1 = 1
    Next RR2
Next RR1
For RR = 1 To 231
    UC = 0
Ini:
    If UC >= 20 Then GoTo SaltaRR
Randomize
    NC = Vn(Int(Rnd() * 22) + 1)
    For CC = 3 To 24
        If Cells(RR, CC).Value = NC Then GoTo Ini
        If Cells(RR, CC).Value = "" Then
            Cells(RR, CC).Value = NC
            UC = UC + 1
            GoTo Ini
        End If
    Next CC
SaltaRR:
Next RR
End Sub


Premetto che le lettere o squadre iniziano dalla riga 1 della colonna A

Ciao

Questo è il numero di combinazioni di 100 elementi in gruppi da 11:

93326215443944200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Calcolo combinatorio

Postdi wallace&gromit » 19/02/12 16:25

per Flash: penso che ti sia spinto un po' più in là del richiesto: le prime 21 righe generate dalla tua macro dovrebbero già soddisfare pienamente le richieste di Karistotele.
Per facilità di lettura sarebbe bello avere le coppie riunite in un'unica cella tipo ab; gf; re; ...
Visto nell'ottica di organizzare un torneo sarebbe bello gestire le coppie come a (squadra di casa) e b (squadra ospite), però nelle prime 21 righe la squadra a giocherebbe sempre in casa.
Ma magari per questo si potrà aprire un nuovo topic?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: Calcolo combinatorio

Postdi Anthony47 » 19/02/12 22:51

Mi sono assentato un giorno e voi fate tutto senza di me? Sono verde dall' invidia...
(Devo pero' confessare che appena finito di scrivere il mio post precedente mi era parso evidente che la richiesta fosse diversa dalla risposta data :oops: ma oramai non avevo tempo per cancellare il post).

Mosso dall' invidia ho googlato con "tournament schedule" e sono arrivato a un file che fa tutto con poche formule (!):http://www.box.com/s/z41sn0yrp5lo1cuozke3 (non c' e' traccia di chi sia l' autore)

L' ho voluto tradurre in macro aggiungendo qualche prestazione.
-si scrive l' elenco delle squadre in un elenco verticale (min 3 max 30 squadre)
-si scrive nella macro la cella di inizio dell' elenco
-si scrive nella macro la cella di inizio del report
-si lancia la macro Comb2a2
Nel caso ci sia un numero dispari di "partecipanti" viene aggiunta una voce "Rip"; nell' ipotesi che sia il calendario di un torneo ad ogni giornata ci sara' un incontro "Rip / Partecipante x"; significa che quel partecipante riposa.
Il calendario viene presentato occupando due celle per ogni incrocio; volendo si puo' modificare per raggruppare in una sola cella.
Il codice della macro:
Codice: Seleziona tutto
Sub comb2a2()
Dim ListA1 As String, Dest As String, MyVArr, DynArr, Rispo, aaa
Dim LstList As Integer, Player As Integer, I As Integer, J As Integer
'Parametri
ListA1 = "A2"   'La cella dove comincia l' elenco dei componenti
Dest = "C2"  'l' area delle combinazioni
'
RePlayer:
LstList = Range(ListA1).Offset(100, 0).End(xlUp).Row
Player = LstList - Range(ListA1).Row + 1
If Player Mod 2 = 1 Then
Range(ListA1).Offset(Player) = "Rip"
GoTo RePlayer
End If
If Player < 4 Or Player > 30 Then
    MsgBox ("Almeno 4 e max 30 Player (ora sono " & Player & "); operazione interrotta")
    Exit Sub
End If
MyVArr = Range(ListA1).Resize(Player, 1).Value
Range(Dest).Resize(Player + 10, Player + 3).Select
Rispo = MsgBox("Ok per azzerare l' area selezionata?" & vbCrLf & _
    "SI per continuare, NO per interrompere", vbYesNo)
If Rispo <> vbYes Then Exit Sub
Selection.Clear
Selection.Range("A1").Select
'inizializza dynArr
DynArr = Range(Dest).Resize(Player - 1, Player).Value
I = UBound(DynArr, 2)
For I = 0 To Player / 2 - 1
    DynArr(1, 1 + I * 2) = 1 + I: DynArr(1, 1 + I * 2 + 1) = Player - I
Next I
For I = 2 To Player - 1
For J = 2 To Player
    DynArr(I, J) = (DynArr(I - 1, J) - 3 + 2 * (Player - 1)) Mod (Player - 1) + 2
Next J
Next I
For I = 2 To Player - 1
    DynArr(I, 1) = 1
Next I
'scrivi in Dest
For I = 1 To Player - 1
    For J = 1 To Player
        With Range(Dest).Offset(I - 1, J - 1)
            .Value = MyVArr(DynArr(I, J), 1)
            If Int((J - 1) / 2) Mod 2 = 0 Then .Interior.Color = RGB(0, 200, 200)
        'Range(Dest).Resize(Player - 1, Player) = DynArr
        End With
    Next J
Next I
End Sub

Provate.

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolo combinatorio

Postdi wallace&gromit » 19/02/12 23:04

Ottimo!
non vorrei "rubare la scena" a Karistotele in questo topic, ma già che ci siamo, riusciresti a fare in modo che ognuno abbia possibilmente lo stesso numero di partite casalinghe e in trasferta?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: Calcolo combinatorio

Postdi Anthony47 » 19/02/12 23:12

In genere questo si risolve con un girone di andata e uno di ritorno...

Comunque direi di provare "variazioni sul tema" solo dopo che Karistotele avra' risolto il suo problema.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Calcolo combinatorio

Postdi Karistotele » 20/02/12 12:28

Scusate il ritardo.

Putroppo non ci siamo Flash. Se aumento i lavoratori avrò doppioni.
Apro un file in cui ho disposto a partire da A2 a scendere i nominativi di 22 lavoratori. Essi lavorano a coppia in 11 banchi (a b) (f v) (dm) eccetera.

Volendo fare in modo che questi lavoratori assumano il più possibile accoppiamenti diversi calcolo che
=combinazione(22;2) essi possono disporsi in 231 modi possibili. Quindi 231/11 = 21.

Devo avere sempre un layout fisso 11 righe * 21 colonne (231 accoppiamenti). Se per esempio un giorno manca il lavoratore b, nell'elenco al posto di b digito per esempio RIP. per cui invece di (a b) avrò (a RIP). insomma il layout 11 * 21 deve essere sempre mantenuto. Ciò vuol dire che quel giorno il lavoratore (a) quel giorno sarà solo nel banco.

Anche se fossero assenti, per assurdo, tutti i lavoratori io dovrei sempre avere un layout 11*21 in cui tutti gli accopiamenti risulterebero (RIP RIP).
Il Layout che vorrei avere è questo.(considerate che non è completo).
Immagine
.K
Avatar utente
Karistotele
Utente Junior
 
Post: 45
Iscritto il: 01/05/10 06:28
Località: PADOVA

Re: Calcolo combinatorio

Postdi Anthony47 » 20/02/12 23:29

Hai avuto occasione di testare anche l' altra macro (viewtopic.php?f=26&t=94628&p=541720#p541696)?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Calcolo combinatorio":


Chi c’è in linea

Visitano il forum: Anthony47 e 7 ospiti