[X3] Le Miniere: funzioni per il calcolo della produttività

Discussioni generali sui giochi della Egosoft, tra cui X-BTF, XT, X², X³, X³TC, X³AP.

Moderator: Moderatori per il Forum Italiano

Garga-Potter
Posts: 781
Joined: Fri, 4. Aug 06, 14:50
x3tc

Post by Garga-Potter »

in realtà, il multiplier importa poco

Quello che vuoi conoscere tu (prodotti per unità di tempo - 60s) si ricava andando un pelo oltre...

Iniziando da capo, è ovvio che la formula DEVE arrotondare il tempo, non potendo produrre in decimi di secondo, e lo fa troncando la frazione

Per uno yeld altissimo si avrebbe un tempo di produzione inferiore a 60 secondi, che sballa i tempi delle altre fabbriche che impiegano i prodotti delle miniere, quindi viene adattata la produzione con questo moltiplicatore che non tocca però il rapporto precedente...

Quindi, introduciamo un nuovo parametro J che vale 2 per le fabbriche M e 5 per quelle L e otteniamo

Conosciamo i prodotti per ciclo (P) e la durata del ciclo (T)... la variabile cercata corrisponde quindi a
60 * P / T

ovvero

60 * (Multiplier * J) / (Multiplier * T) = 60 * J / T

ovvero, riprendendo l'equazione della prima riga

60 * J / (rounddown( 600 * K / (Yield + 1) ) + 1)

dove
K=1 per ore e 4 per silicon
J=2 per M e 5 per L
rounddown è una funzione che elimina la parte dopo la virgola della prima divisione (600 * K / (Yeld+1))

Sono quasi propenso a credere che stavolta non ho cappottato le formule :D

PS: Possiamo semplificare ulteriormente il calcolo in questo modo

Prodotti al minuto= J / (int( K / (Yield + 1) ) +1)
dove
J=120 per le stazioni M e 300 per le L
K= 2400 per Silicon e 600 per Ore
- Never argue with an idiot: he will first take you to his level and then crash you with his experience!
- If you live in a village and never met his fool... start to worry!
- Good Bye, and thanks for all the fish.
User avatar
Dallatorre
Posts: 341
Joined: Sun, 16. Sep 07, 20:54
x3tc

Post by Dallatorre »

che bon temp.
io mi sarei stufato a calcolare tutto.
(k)
Posts: 3690
Joined: Sun, 18. Jun 06, 14:23
x4

Post by (k) »

Mietitore wrote: Eccomi qua.

Spulciamo il topic Inglese... ;)

Per quel poco che capisco di inglese "tecnico", questo topic è una analisi del codice che regola il tempo di ciclo delle miniere e sul fatto che due miniere con Rendite X e Y producano separatamente più di quanto non produca una miniera con Rendita=X+Y... fatto curioso che sembra dire: l'unione fa la forza.

Credo che questa sia la frase chiave...
For example, yields 12 and 14 produce almost as much as one yield 27. Four yield 8 mines produce almost as much as one yield 35 mine
Quindi nella tabella fa vedere che al crescere dello Yield ci sia un dato, chiamato Fab_equiv, che cresce non linearmente (ma tipo "parabola" per intenderci).

L'equazione

Basic_cycletime = rounddown( BASETIME / (Yield + 1) ) + 1 seconds

che poi è quella che dici tu, non serve per calcolare il ciclo di una determinata miniera ma per rendere equiparabili tutte le miniere e poterle studiare.


Infatti, come i campionamenti mostrano, quando il tempo di ciclo di una determinata miniera diventa inferiore a un minuto, con un espediente (aumento di risorse necessarie e della relativa produzione) il ciclo viene "riallungato".

Frase chiave:
Code:

Multiplier = rounddown( 59.9 / Basic_cycletime ) + 1
Cycletime = Multiplier * Basic_cycletime
...
The purpose of the Multiplier is to prevent the cycle time to be shorter than 60 seconds.
In definitiva l'equazione T = ( (25 * K) / (Y + 1) ) + 1 è solo il primo passaggio per calcolare il tempo di ciclo di una Miniera.


------ ° ------ ° ------ ° ------ ° ------ ° ------ ° ------ ° ------

Ecco L'ESPEDIENTE che rende non lineare il rapporto:

Codice
Basic_cycletime = rounddown( BASETIME / (Yield + 1) ) + 1 seconds
Multiplier = rounddown( 59.9 / Basic_cycletime ) + 1
Cycletime = Multiplier * Basic_cycletime
Products per cycle = Multiplier * Fab_size


Proviamo a decodificare riga per riga:

INIZIALIZZAZIONE DELLE COSTANTI.
There is a BASETIME, which is 2400 seconds (40 minutes) for Silicon and 600 seconds (10 minutes) for Ore. Fab_size is 2 for M, and 5 for L.
Si stabilisce che a seconda del tipo di miniera vi sia un primo coefficiente chiamato BASETIME pari a 2400 per Silicon e 600 per Ore (usato nella prima riga di codice) e un secondo coefficiente chiamato Fab_size che è pari a 2 per miniere M e 5 per miniere L (usato nell'ultima riga).

Inoltre facendo la proporzione 2400 : 600 = 96: 24 = 4 : 1 si capisce il dato da te giustamente citato:

K=96 per le miniere di silicio
K=24 per le miniere di minerale

per cui la parte (25 * K) della equazione diventa 2400 per Silicio e 600 per Minerale (appunto il basetime).

Nota: non si capisce il perchè la riduzione ai minimi termini non sia stata completa visti che (25*K) con K = 24 o 96 è uguale a (600*K) con K = a 1 o 4 (coefficienti più "eleganti").

riga 1.
Basic_cycletime = rounddown( BASETIME / (Yield + 1) ) + 1 seconds
Solo a questo punto si può fare la prima equazione (la famosa T = ( Basetime / (Y + 1) ) + 1) del codice e determinare il Basic_cycletime che verrà utilizzato nei passaggi seguenti.

riga 2.
Multiplier = rounddown( 59.9 / Basic_cycletime ) + 1
Si imposta una nuova variabile, dipendente dal Basic_cycletime sopra definito, chiamata Multiplier che fa si che il tempo di ciclo non cada mai sotto i 60 secondi. I motivi di questo passaggio sono oscuri, ma sembrano più un fatto di stile piuttosto che una cosa fondamentale.
Unico motivo: non si vuole far produrre alcuna miniera in meno di un minuto.
Notare che in questa riga di codice e in quella prima appare una funzione (rounddown) che è stata precedentemente implementata o che è gia compresa nel linguaggio utilizzato. Dovrebbe trattarsi di un arrotondamento.

riga 3.
Cycletime = Multiplier * Basic_cycletime
Ecco finalmente il tempo di ciclo che vediamo nelle "informazioni" della miniera nel gioco!

riga 4.
Products per cycle = Multiplier * Fab_size
Finalmente ricaviamo i prodotti per tempo di ciclo.

------ ° ------ ° ------ ° ------ ° ------ ° ------ ° ------ ° ------

Riassumendo:

data una miniera, per ricavare i prodotti per tempo di ciclo (N.B.: non per unitò di tempo!) sono necessari 4 passaggi che presuppongono lo sviluppo di una funzione predefinita (rounddown) e la conoscenza di una costante (BASETIME).

Praticamente, per conoscere questo dato, o si ha una tabella o si fa prima ad installare una miniera e a guardarne i dettagli. :lol:

Quella parte di codice serve per impostare la nuova quantità di risorse e la nuova capacità produttiva quando il tempo di ciclo, che altrimenti andrebbe sotto i 60 secondi, viene reincrementato al crescere della Rendita.

Questo affinchè si mantenga una giusta logica secondo la quale "all'aumentare della rendita, la capacità produttiva per unità di tempo aumenta".

Non so se ho interpretato bene la cosa. :oops:

Discussione molto interessante comunque: GRAZIE Garga-Potter! :)
O.o
in realtà, il multiplier importa poco

Quello che vuoi conoscere tu (prodotti per unità di tempo - 60s) si ricava andando un pelo oltre...

Iniziando da capo, è ovvio che la formula DEVE arrotondare il tempo, non potendo produrre in decimi di secondo, e lo fa troncando la frazione

Per uno yeld altissimo si avrebbe un tempo di produzione inferiore a 60 secondi, che sballa i tempi delle altre fabbriche che impiegano i prodotti delle miniere, quindi viene adattata la produzione con questo moltiplicatore che non tocca però il rapporto precedente...

Quindi, introduciamo un nuovo parametro J che vale 2 per le fabbriche M e 5 per quelle L e otteniamo

Conosciamo i prodotti per ciclo (P) e la durata del ciclo (T)... la variabile cercata corrisponde quindi a
60 * P / T

ovvero

60 * (Multiplier * J) / (Multiplier * T) = 60 * J / T

ovvero, riprendendo l'equazione della prima riga

60 * J / (rounddown( 600 * K / (Yield + 1) ) + 1)

dove
K=1 per ore e 4 per silicon
J=2 per M e 5 per L
rounddown è una funzione che elimina la parte dopo la virgola della prima divisione (600 * K / (Yeld+1))

Sono quasi propenso a credere che stavolta non ho cappottato le formule

PS: Possiamo semplificare ulteriormente il calcolo in questo modo

Prodotti al minuto= J / (int( K / (Yield + 1) ) +1)
dove
J=120 per le stazioni M e 300 per le L
K= 2400 per Silicon e 600 per Ore
o.O


EEEEEEhhhh?!?!?!?!
"anche se rimbalzano, non sono di gomma!" (manuale di pronto soccorso, capitolo sui bambini)
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

@(k)

:lol:

eccola la sfida all'ultimo sangue che volevi!!!

si combatte a suon di matematica. :)


@Garga-Potter

Vediamo:

Miniera M (Rendita=Yield=10)

Valori campionamento

1. T = 1:50 = 110 secondi (Tempo di Ciclo)

2. P = 4 (Prodotti per Ciclo)

3. Quindi prodotti al minuto = 4 / 110 * 60 (ossia come dici tu 60 * P / T)= 2,18 (periodico)

Valore ricavato dall'equazione J / (int( K / (Yield + 1) ) +1) da te riportata, se int è la parte intera dell'argomento:

con J = 120 e K = 600

120 / (int ( 600 / 10 + 1 ) + 1) = 120 / (int ( 600 / 11 ) + 1) =

= 120 / (int ( 54.54 ) + 1) = 120 / 54 + 1 = 120 / 55 = 2.18 (periodico)


Miniera Silicio L (Rendita=Yield=10)

Valori campionamento

1. T = 3:39 = 219 secondi

2. P = 5 (Prodotti per Ciclo)

3. Quindi prodotti al minuto = 5 / 219 * 60 = 1,36

Valore ricavato dall'equazione J / (int( K / (Yield + 1) ) +1):

con J = 300 e K = 2400

300 / (int (2400 / 10 + 1 ) + 1) = 300 / (int ( 2400 / 11 ) + 1) =

= 300 / (int ( 218.18 ) + 1) = 300 / 218 + 1 = 300 / 219 = 1.36

Tutto torna allora:

conoscendo i parametri J e K la formula

J / ( int ( K / ( Rendita + 1 ) ) + 1 )

restituisce valori riscontrati anche nella pratica

ergo

è la forma unica e corretta per calcolare la produzione per unità di tempo.

Certo, questo è un risultato al quale si arriva conoscendo preventivamente il codice, ma è innegabilmente più elegante e preciso. :thumb_up:

Bella Garga, m'è piaciuta 'sta cosa. :)

Se sei daccordo, metterei questa formula sicuramente migliore nel topic principale. Attendo.
Last edited by Mietitore on Sun, 30. Mar 08, 13:46, edited 1 time in total.
User avatar
Marvho
Posts: 4934
Joined: Mon, 4. Oct 04, 14:33
x4

Post by Marvho »

a me la matemetica è stata sempre sugli zebedei.. e mi rifiuto di leggere tutta quella robaccia
:lol:
cmq trovo normale che
una singola miniera con rendita 20 produca meno di 2 con rendita di 10 ciascuna... quantomeno perche consumano molta piu energia.
8)
What?
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

In effetti è solo algebra facile facile... più che altro abbiamo allungato il brodo con un fracco di passaggi che in effetti era possibile saltare per far sembrare tutto più "importante".

:lol:

Ti faccio il riassunto definitivo, che poi è quello che metteremo sul topic se Garga-Potter (che ne ha ricavato la forma definitiva) è daccordo, come formula UNICA e OTTIMALE per capire la produttivita al minutto in base alla rendita dell'asteroide.

Questo risultato, contrariamente alle 4 equazioni che ho tirato giù dai campionamenti, deriva direttamente dal codice che gestisce la produzione delle Miniere e quindi è per forza più preciso, semplice e formalmente elegante:

--------- ooooooo --------- ooooooo --------- ooooooo ---------


Tenuto conto del seguente schema

[ external image ]

detti

Pm = prodotti al minuto

R = rendita dell'astreroide


si ha che

[ external image ]

con Int = parte intera, ossia arrotondamento verso il basso del numero che si ottiene da K / (R + 1).

--------- ooooooo --------- ooooooo --------- ooooooo ---------
Last edited by Mietitore on Mon, 31. Mar 08, 16:24, edited 1 time in total.
aska
Posts: 388
Joined: Thu, 9. Sep 04, 00:26
x3

Post by aska »

Marvho wrote:a me la matemetica è stata sempre sugli zebedei.. e mi rifiuto di leggere tutta quella robaccia
:lol:
cmq trovo normale che
una singola miniera con rendita 20 produca meno di 2 con rendita di 10 ciascuna... quantomeno perche consumano molta piu energia.
8)
Devo proprio farlo, sono costretto... :lol:
Straquoto Marvho :lol: :lol: :lol:
Garga-Potter
Posts: 781
Joined: Fri, 4. Aug 06, 14:50
x3tc

Post by Garga-Potter »

@mietitore... Sono ovviamente d'accordo: non c'era neanche bisogno di chiedere... a parte che J e K sono da modificare nella "formula definitiva finale"...

J=120 per le stazioni M e 300 per le L
K= 2400 per Silicon e 600 per Ore

@ aska e marvho: :D :D ma la matematica è solo una questione di logica... e dato che di logica ne dovete avere molta (sennò che ci giocate a fare a X3?) evidentemente avete avuto un pessimo prof che invece di farvi apprezzare la poesia che sottende alla matematica... ve l'ha fatta odiare... un po' come me per il latino :(
- Never argue with an idiot: he will first take you to his level and then crash you with his experience!
- If you live in a village and never met his fool... start to worry!
- Good Bye, and thanks for all the fish.
tralux
Posts: 4837
Joined: Sun, 22. Feb 04, 13:07
x4

Post by tralux »

Con tutti sti numeri una combinanzione vincente al lotto me la tirate fuori o no :roll: :lol:
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

@Garga-Potter
Sono ovviamente d'accordo: non c'era neanche bisogno di chiedere... a parte che J e K sono da modificare nella "formula definitiva finale"...

J=120 per le stazioni M e 300 per le L
K= 2400 per Silicon e 600 per Ore
li inserisco in tabella e metto sul topic principale

PS: meglio usare coefficienti alti o mettere la seguente formula?

Pm = 60J / ( int ( 600K / ( R + 1 ) ) + 1 )

PS2: si puo' semplificare in

Pm = J / ( int ( 10K / ( R + 1 ) ) + 1 )

oppure l'arrotondamento può dare problemi?
Garga-Potter
Posts: 781
Joined: Fri, 4. Aug 06, 14:50
x3tc

Post by Garga-Potter »

Mietitore wrote:oppure l'arrotondamento può dare problemi?
questo è sicuro!
Lascia i coefficienti alti!
- Never argue with an idiot: he will first take you to his level and then crash you with his experience!
- If you live in a village and never met his fool... start to worry!
- Good Bye, and thanks for all the fish.
Garga-Potter
Posts: 781
Joined: Fri, 4. Aug 06, 14:50
x3tc

Post by Garga-Potter »

tralux wrote:Con tutti sti numeri una combinanzione vincente al lotto me la tirate fuori o no :roll: :lol:
Ho 3 combinazioni: ognuna costa 2500 crediti... dimmi tu quale scegli e ti dirò le coordinate del mio conto corrente :D
- Never argue with an idiot: he will first take you to his level and then crash you with his experience!
- If you live in a village and never met his fool... start to worry!
- Good Bye, and thanks for all the fish.
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

Fatto! :)

@Garga-Potter
Per cortesia, da un'occhiata al post principale (ho modificato intro e finale) e vedi se va tutto bene, chè dopo questo fine settimana di "movida" non sono ancora in grado di intendere o di volere... figurati di fare esercizio matematico. Grazie ;)
Ottimo lavoro!
(k)
Posts: 3690
Joined: Sun, 18. Jun 06, 14:23
x4

Post by (k) »

Mietitore wrote: Eccola la sfida che volevi! Si combatte a suon di matematica! :)
Va bene va bene! Hai vinto! Hai vinto! Mi arrendo!

Comunque se tutto sto matachiummo infernale può essere utile a qualcuno...
Last edited by (k) on Mon, 31. Mar 08, 17:04, edited 1 time in total.
"anche se rimbalzano, non sono di gomma!" (manuale di pronto soccorso, capitolo sui bambini)
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

:lol:

dai (k) l'ultima formuletta è facile facile... guarda gli esempi che magari la puoi trovare utile anche tu... perchè io sinceramente non so che farmene... con tutti i crediti che ho accumulato posso costruire una miniera solo per vedere i dati e farla saltare in aria un secondo dopo!!! :twisted:

edit1: Dai, hai editato il messaggio mentre rispondevo: così sembro più svalvolato ancora!

edit2: noooo... di nuovo! :evil:
Last edited by Mietitore on Mon, 31. Mar 08, 17:06, edited 1 time in total.
(k)
Posts: 3690
Joined: Sun, 18. Jun 06, 14:23
x4

Post by (k) »

La mia idea sulla matematica:

Il calabrone vola. Ma sapete che matematicamente parlando non potrebbe volare? Le sue ali sono troppo piccole e lente per permettergi di volare.
Ma il calabrone non lo sa, e quindi continua a volare.

:D
Last edited by (k) on Mon, 31. Mar 08, 17:09, edited 2 times in total.
"anche se rimbalzano, non sono di gomma!" (manuale di pronto soccorso, capitolo sui bambini)
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

Si vede che il calabrone discende da David Copperfield... :P
(k)
Posts: 3690
Joined: Sun, 18. Jun 06, 14:23
x4

Post by (k) »

Quanto all' utilità non me ne faccio niente manco io... Rendita silicio<60= abbastanza silicio da far funzionare due cristallerie, 2 cristallerie=centrale solare XXL, centrale solare XXL=Complessone autosufficente
Complessone autosufficente=$$$

Capito?

David Copperfield? E chi è? Il cartomante di turno? (ho tirato a indovinare... uno che si chiama David Copperfield che cosa può fare nella vita...)
"anche se rimbalzano, non sono di gomma!" (manuale di pronto soccorso, capitolo sui bambini)
Garga-Potter
Posts: 781
Joined: Fri, 4. Aug 06, 14:50
x3tc

Post by Garga-Potter »

(k) wrote:Ma il calabrone non lo sa, e quindi continua a volare.
Mi ricorda molto Douglas Adams e su come chiunque possa imparare a volare... basta inciampare e dimenticarsi di urtare il suolo: se ignori a sufficienza la legge di gravità anche lei ti ignorerà e il gioco è fatto!!! (Hitch-hiker's guide to the Galaxy)
- Never argue with an idiot: he will first take you to his level and then crash you with his experience!
- If you live in a village and never met his fool... start to worry!
- Good Bye, and thanks for all the fish.
Mietitore
Posts: 428
Joined: Wed, 2. Jan 08, 14:05
x3

Post by Mietitore »

David Copperfield è quel "mago" che ciul... con la Shiffer (non so se stiano ancora assieme).

Negli spettacoli "volava" sopra al pubblico...

Sì, più o meno è un cartomante... :)

Dai adesso andiamo totalmente OffTopic e partiamo con la filosofia... :roll:
Last edited by Mietitore on Mon, 31. Mar 08, 17:17, edited 1 time in total.

Return to “L'Universo della Trilogia di X”