2017-08-29 1 views
0

En utilisant JuMP Je veux faire une fonction objectif comme celui-ci:Comment dérouler un calcul de produit interne en utilisant la macro julia?

@objective(m, Max, 19*run[1] + 15*run[2] + 15*run[3]) 

... où 19, 15 et 15 sont les services publics d'activités, et exécuter [i] est une variable JUMP binaire décrivant si l'activité devrait être exécuté ou non.

Je veux faire une macro qui génère cet objectif, de sorte que donné une liste des services publics = (19, 15, 15) au lieu de ce qui précède, je peux écrire quelque chose comme ceci:

@myObjective (m , Max, utilities, run)

et cela fonctionnera comme l'objectif que j'ai tapé ci-dessus. (Le raisonnement est que je ne veux pas utiliser un objectif quadratique, donc je ne peux pas utiliser un utilitaire "variable" JuMP et laisser l'objectif être sum (exécuter [i] * utilitaire [i]). Cependant, depuis que je connais les utilités à l'avance, une macro peut peut-être être écrite pour écrire une belle fonction objectif linéaire.Pour trois activités, une macro n'aiderait pas beaucoup, mais dans les vrais problèmes, il y aura beaucoup d'activités, donc être utile.

J'ai lutté pendant un certain temps maintenant et je ne reçois pas une traction, personne ne sait comment résoudre facilement ce?

aussi toute autre approche pour résoudre ce problème de ne pas utiliser des macros de être utile :-)

Répondre

3

À moins les services publics est une variable JUMP, vous pouvez le faire @objective (m, Max, point (services publics, exécution)), ce n'est pas quadratique

+0

Cela résout le problème. ("Import Base: dot" nécessaire, mais c'est bien sûr un détail.) Merci;) – Rmz