[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-glpk] How to code restriction on number of variables > 0
From: |
Baake, Wouter |
Subject: |
Re: [Help-glpk] How to code restriction on number of variables > 0 |
Date: |
Thu, 20 Feb 2014 13:05:49 +0000 |
Hi Heinrich,
Thanks for your answer, but I'm having some trouble implementing it.
My original model would look something like this:
set Products;
set Unit_operations;
set Ingredients;
set Elements;
param cost {Products};
param aim {Products};
param concentration {Ingredients,Elements};
var ingredient_used {Products, Unit_operations,Ingredients} >= 0;
minimize total_cost: sum{p in Products,u in Unit_operations, i in Ingredients}
cost[i] * ingredient_used [p,u,i];
Subject to {p in Products, e in Elements}: sum {u in Unit_operations, i in
Ingredients} (ingredient_used [p,u,i]*concentration[i,e]) = aim[p,e];
To add the binary variable, I would then write this as:
set Products;
set Unit_operations;
set Ingredients;
set Elements;
param cost {Products};
param aim {Products};
param concentration {Ingredients,Elements};
var ingredient_used {Products, Unit_operations,Ingredients} >= 0;
var ingredient_used_yes_no {Products, Unit_operations,Ingredients} binary;
minimize total_cost: sum{p in Products,u in Unit_operations, i in Ingredients}
cost[i] * ingredient_used [p,u,i];
Subject to {p in Products, e in Elements}: sum {u in Unit_operations, i in
Ingredients} (ingredient_used [p,u,i]*concentration[i,e]) = aim[p,e];
Subject to {p in Products,u in Unit_operations,i in Ingredients :
ingredient_used_yes_no[p,u,i]=0}: ingredient_used[p,u,i]=0;
Unfortunately, I then get an error: "operand preceding = has invalid type"
which I do not understand.
You write "Add a constraint limiting the ingredient quantity to zero if the
binary is" but my attempts to do this result in errors when I run glpsol. Do
you have an example of how to write this constraint?
Regards,
Wouter
-----Original Message-----
From: Heinrich Schuchardt [mailto:address@hidden
Sent: Thursday, February 20, 2014 12:37 PM
To: Baake, Wouter
Cc: Help Glpk
Subject: Re: [Help-glpk] How to code restriction on number of variables > 0
Hello Wouter,
you can add a binary variable per ingredient.
Add a constraint limiting the ingredient quantity to zero if the binary is 0.
aim <= M *x;
Choose M as small as possible.
Add a constraint for the sum of the binaries.
Best regards
Heinrich Schuchardt
http://www.xypron.de
On 20.02.14 at 11:49, Baake, Wouter wrote:
> Hi,
>
>
>
> I'm modelling a problem where I need to make several products with different
> specifications. Each product undergoes several unit operations where
> ingredients are added.
>
> var ingredient_used {Products, Unit_operations,Ingredients} >= 0;
>
>
>
> Each ingredient has a cost and the total cost is to be minimized:
>
> minimize total_cost: sum{p in Products,u in Unit_operations, i in
> Ingredients} cost[i] * ingredient_used [p,u,i];
>
>
>
> Each ingredient consists of several elements in different concentrations.
> Each of the products has an aim value for concentration of each of the
> elements in the product:
>
> Subject to {p in Products, e in Elements}: sum {u in Unit_operations, i in
> Ingredients} (ingredient_used [p,u,i]*concentration[i,e]) = aim[p,e];
>
>
>
> This problem I can model and solve, but I need to add some more constraints.
>
> One constraint is that there is a maximum number of ingredients that can be
> kept in stock at a given unit operation. As an example, at the first unit
> operation, I cannot keep more than 10 ingredients in stock, but the amount
> per ingredient is unlimited.
>
>
>
> How could I translate this into a mathprog constraint?
>
>
>
> Regards,
>
> Wouter
>
>
>
>
>
> **********************************************************************
>
>
>
> This transmission is confidential and must not be used or disclosed by anyone
> other than the intended recipient. Neither Tata Steel Europe Limited nor any
> of its subsidiaries can accept any responsibility for any use or misuse of
> the transmission by anyone.
>
>
>
> For address and company registration details of certain entities within the
> Tata Steel Europe group of companies, please visit
> http://www.tatasteeleurope.com/entities
>
>
>
> **********************************************************************
>
> _______________________________________________
>
> Help-glpk mailing list
>
> address@hidden
>
> https://lists.gnu.org/mailman/listinfo/help-glpk
**********************************************************************
This transmission is confidential and must not be used or disclosed by anyone
other than the intended recipient. Neither Tata Steel Europe Limited nor any of
its subsidiaries can accept any responsibility for any use or misuse of the
transmission by anyone.
For address and company registration details of certain entities within the
Tata Steel Europe group of companies, please visit
http://www.tatasteeleurope.com/entities
**********************************************************************