Per aggiungere un po 'più di informazioni al commento che ho lasciato sulla risposta di World Engineer:
Questo è generalmente definito ottimizzazione multiobiettivo. Wikipedia ha un sommario piuttosto buono dell'argomento, ti consiglio di esaminarlo. La buona notizia è che si tratta di un'area molto ben studiata, con molte idee e algoritmi disponibili. La cattiva notizia è che si tratta di un'area di ottimizzazione difficile, tranne che nei casi più basilari (che possono spesso essere risolti con matematica di base, ad esempio con Programmazione lineare).
Se la serie di vincoli è piuttosto fissa (o generalmente segue un semplice schema), consiglierei di provare a risolvere il problema in modo matematico. Queste soluzioni sono quasi sempre più efficienti delle alternative, che sarebbero una sorta di ricerca esauriente, o se lo spazio di ricerca è troppo grande, una ricerca randomizzata con una sorta di euristica / intelligenza integrata in esso.
Una parola sulla ponderazione: esiste tipicamente un numero intero di soluzioni che sono "pareto ottimali", il che significa che non puoi più migliorare nessuno degli obiettivi senza causare danni agli altri (questo è simile al "minimo locale / minimi "nell'ottimizzazione standard). Insieme, queste soluzioni pareto-ottimali formano il fronte paretiano, che spesso forma una forma visivamente continua. Matematicamente, queste soluzioni sono considerate equivalenti, e spetta a te fornire ulteriori informazioni al fine di scegliere tra loro, cioè quali trade-off consideri più importanti. Talvolta queste decisioni sono lasciate all'utente e il ruolo del software è quello di fornire loro le varie soluzioni pareto-ottimali (ad esempio un professionista degli investimenti che sceglie il profilo di rischio per un portafoglio). Questa potrebbe essere un'opzione da prendere in considerazione anche nel tuo caso.