Calcola quali pacchetti di quantità utilizzare in base alla quantità di prenotazioni

0

Nella mia app, molti appuntamenti possono essere prenotati per le attività. Ogni attività ha molti pacchetti di prezzo con un prezzo e una quantità.

Quando mostro il carrello, ho bisogno di capire quale combinazione di pacchetti usare per ottenere all'utente i prezzi migliori e permettere che tutti gli appuntamenti siano contabilizzati.

Non esiste sempre un pacchetto quantità 1.

C'è un modello comune da applicare a questo?

Ecco dove sono arrivato prima che mi rendessi conto di quanto sarebbe stato difficile:

cost = 0
i = appointments.count
activity.packages.order(:quantity => :asc).each do |package|      
   if i >= package.quantity &&  i.modulo(package.quantity) == 0                   
     cost = cost + (package.price * i/package.quantity )
     i = i - i/package.quantity
   end  
end
if i > 0 
  raise "error: packages do not cover number of children."
end 

Questo è in ruby (rail).

Quindi il problema che non ho visto fino a quando ho scritto quanto sopra è, e se ci sono 8 appuntamenti e pacchetti per 4 & 5 - userà il pacchetto 5, quindi l'ultimo 3 non entrerà in un pacchetto 4 e fallirà.

MODIFICA: maggiori dettagli

Quindi la struttura è

activities has_many packages
packages:  
 quantity: integer
 price: float

Quindi un pacchetto definisce un prezzo per un gruppo di appuntamenti per un'attività.

Quindi, ad esempio, le lezioni di vela sono $ 500 per 5 o $ 430 per 4.

Se l'utente ordina 8 lezioni di vela, l'app deve capire che dovrebbe utilizzare due dei pacchetti quantità 4 = $ 860

Se l'utente ordina 9 lezioni di vela, l'app dovrebbe funzionare hanno bisogno di 1 pacchetto di Quantità 5 e un pacchetto di quantità 4. etc

    
posta Will 28.08.2014 - 11:10
fonte

1 risposta

2

Questo non è risolvibile se il numero richiesto di appuntamenti non può essere scritto come somma dei numeri Pacchetto.Quantità disponibili.

Ma forse quella richiesta è troppo severa. Perché non dire che vuoi offrire al cliente la somma più economica disponibile di pacchetti? Per esempio. se vuole 8 appuntamenti ma non puoi abbinare 8, gli dai, ad es. 5 + 4 pacchetti.

Consenti alle definizioni del pacchetto di seguire queste regole:

se Quantità per Pacchetto1 è maggiore di Quantità per Pacchetto2, quindi
1) Il prezzo per Package1 è superiore al prezzo per Package2 e
2) Il Prezzo / Quantità media per Pacchetto1 è < = Prezzo / Quantità per Pacchetto2 3) Hai sempre un pacchetto con quantità 1

Quindi puoi fare quanto segue (meglio illustrato con un esempio numerico):

Supponi di avere questi pacchetti:

12 for 600 = avg 50
10 for 550 = avg 55
5 for 500 = avg 100
4 for 400 = avg 100
3 for 360 = avg 120
2 for 260 = avg 130

Il cliente vuole 8 appuntamenti
Le alternative che corrispondono esattamente sono ad es 5 + 3 = prezzo 860 avg 108
4 + 4 = prezzo 800 avg 100
Ma '10 per 550 'sarebbe la soluzione migliore se si vuole minimizzare il prezzo: 550

Quindi assumendo le condizioni precedenti:
1) Se la quantità esatta corrisponde - > prendilo (non vuoi andare 'più in alto' perché questo riduce le tue vendite inutilmente)
2) In caso contrario, prendi il pacchetto con la quantità 'next up' (il 10)
3) Se questo non esiste, devi "scendere"

3a) Prova a trovare una somma esatta dalle maggiori quantità possibili,
cioè il minor numero di pacchetti combinati
Questo perché sai che questi hanno i costi medi più bassi
Tutte le combinazioni possibili sono:

5+3       860   avg 108
4+4       800   avg 100
4+2+2     920   avg 115
3+3+2     980   avg 123
2+2+2+2   1040  avg 130

Quindi hai 2 candidati con solo due pacchetti.
Prendi quello con il prezzo più basso (4 + 4).

Se non hai un pacchetto con quantità 1 hai bisogno di un passo 3b (ma poi non riesco a capire l'algoritmo), OPPURE puoi anche predefinire i pacchetti in modo che tutte le combinazioni possano essere fatte - con le quantità del campione Ho dato (2,3,4,5,10,12) che puoi soddisfare qualsiasi numero con questo algoritmo.

    
risposta data 28.08.2014 - 12:05
fonte

Leggi altre domande sui tag