My and my friends are working on an AMPL project. The goal of the project is to maximize profit in a fiber-to-the-home network. Network works without routers or splitters, only nodes with cabinets where one cable with x fibers can be split into cables with less fibers or connected with other cables to create cables with more fibers. That said, one dedicated fiber is supposed to reach from a single central node to an access point with n clients (the demand; we don't worry how the clients are connected to access points). We have edges between all nodes (central node, transit nodes and access points) that have a trenching cost for putting cable(s) there and length (because each type of cable has cost per km and number of fibers).
Our problem is: on each edge we can have number of cables, of different cable types. We don't know how to declare this situation in AMPL network model to let it now that
- on each edge there can be more than one cable (of different types which we later declare in each situation)
- we also don't know how to let program know it can choose from different cable types
I thought about a solution to create an independent set of cables for each edge (link) but I don't know if that's possible in AMPL.
So far we have below code
Help will be much appreciated, thanks!
set ACCESSPOINTS;
set TRANSITS;
set CENTRAL
set NODES := ACCESSPOINTS union TRANSITS union CENTRAL;
set LINKS within (NODES cross NODES);
set CABLES;
#set DEMANDS within (CENTRAL cross ACCESSPOINTS);
param demand {ACCESSPOINTS} >=0;
param trenching_cost {LINKS} >= 0;
param length {LINKS} >= 0;
param cabinet_cost {TRANSITS} >= 0;
param cost_per_km {CABLES} >= 0;
param fibers {CABLES} >= 0;
param originates {n in NODES, (i,j) in LINKS} binary :=
if (i = n) then 1 else 0;
param terminates {n in NODES, (i,j) in LINKS} binary :=
if (j = n) then 1 else 0;