Foro no oficial de la UPCT
[EXAMEN] Prácitcas Planificación Febrero 2016 - Versión para impresión

+- Foro no oficial de la UPCT (https://foroupct.es)
+-- Foro: 3º GIT (https://foroupct.es/Forum-3%C2%BA-GIT)
+--- Foro: Planificación y gestión de redes (https://foroupct.es/Forum-Planificaci%C3%B3n-y-gesti%C3%B3n-de-redes)
+--- Tema: [EXAMEN] Prácitcas Planificación Febrero 2016 (/Thread-EXAMEN-Pr%C3%A1citcas-Planificaci%C3%B3n-Febrero-2016)



Prácitcas Planificación Febrero 2016 - alfonso - 04-02-2016

Está sin resolver.
Código PHP:
package examen
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;


import java.util.Set;

import com.net2plan.interfaces.networkDesign.IAlgorithm;
import com.net2plan.interfaces.networkDesign.Net2PlanException;
import com.net2plan.interfaces.networkDesign.NetPlan;
import com.net2plan.libraries.GraphUtils;
import com.net2plan.libraries.IPUtils;
import com.net2plan.utils.BooleanUtils;
import com.net2plan.utils.DoubleUtils;
import com.net2plan.utils.Pair;
import com.net2plan.utils.Triple;


public class 
examFeb2016_APELLIDOS_NOMBRE implements IAlgorithm
{

    private 
Set<LonglinkIds;
    private 
Set<LongnodeIds;
    private 
long[] demandIdsVector;
    private 
long[] linkIdsVector;

    private 
Map<LongDoubleu_eh_d;
    private 
Map<Long,Pair<Long,Long>> linkMap
    private 
Map<Long,Pair<Long,Long>> demandMap;

    @
Override
    
public String executeAlgorithm(NetPlan netPlanMap<StringStringalgorithmParametersMap<StringStringnet2planParameters)
    {
        final 
int N netPlan.getNumberOfNodes();
        final 
int D netPlan.getNumberOfDemands();
        final 
int E netPlan.getNumberOfLinks();
        
        
/* Initialize some variables */
        
nodeIds netPlan.getNodeIds();
        
linkIds netPlan.getLinkIds();
        
linkMap netPlan.getLinkMap();
        
demandMap netPlan.getDemandMap();
        
        
demandIdsVector netPlan.getDemandIdsVector();
        
linkIdsVector netPlan.getLinkIdsVector();
        
        
u_e netPlan.getLinkCapacityMap();
        
h_d netPlan.getDemandOfferedTrafficMap();

        
        
/* A COMPLETAR (5%): Guardar los parametros de entrada en variables locales, con el mismo nombre que el parametro */
        
        


        /* A COMPLETAR (5%): Establecer la solución inicial (peso para cada enlace), que se almacena en un mapa (de nombre current_weights_e) que almacene clave-valor = ID_enlace - peso asociado */
         





        
System.out.println("initial solution " current_weights_e);

        
/* A COMPLETAR (5%): Calcular la congestión inicial y guardarla en current_congestion */
        

    


        /* A COMPLETAR (10%): Actualizar la mejor solucion encontrada hasta la fecha, que en este punto es una COPIA de la solucion inicial. */
        /* La mejor solución se guarda como best_weights_e (Map<Long,Double>) y double best_congestion  */
        



        


        
        /* A COMPLETAR (75%): implementación del algoritmo realizando la búsqueda best-fit */
        /* Bucle principal */





















        /* Chequear la solucion final encontrada*/
        
if (best_weights_e.size() != E
            throw new 
Net2PlanException ("Error: El vector solucion no esta bien codificado");
        for (
int e ++)
            if ((
best_weights_e.get(linkIdsVector[e]) <= 0) || (best_weights_e.get(linkIdsVector[e]) > maxLinkWeight)) 
                throw new 
Net2PlanException ("Error: el peso asociado al enlace " " no es correcto: " +best_weights_e.get(linkIdsVector[e]));
        if (
Math.abs(best_congestioncomputeNetCongestion(nodeIdslinkMapbest_weights_edemandMapu_eh_d)) > 1e-3) throw new Net2PlanException ("La solución devuelta y la congestión devuelta no encajan");
        
        
/* Devolver la mejor solucion encontrada  */
        
netPlan.removeAllRoutes();
        
netPlan.removeAllProtectionSegments();
        
IPUtils.setECMPForwardingRulesFromLinkWeights(netPlanbest_weights_e); 

        
        
System.out.println(best_weights_e);

        return 
"Ok! Congestion : " best_congestion;
    }


    @
Override
    
public String getDescription()
    {
        return 
"";
    }

    @
Override
    
public List<Triple<StringStringString>> getParameters()
    {
        List<
Triple<StringStringString>> algorithmParameters = new ArrayList<Triple<StringStringString>>();
        
algorithmParameters.add(Triple.of("maxLinkWeight""5""Maximum OSPF weight associated to a link"));
            
        return 
algorithmParameters;
    }

    
/* computes the congestion in the network (the objective function of the problem) */
    
private double computeNetCongestion (Set<LongnodeIdsMap<Long,Pair<Long,Long>> linkMapMap<Long,DoublelinkWeightMapMap<Long,Pair<Long,Long>> demandMapMap<LongDoubleu_e Map<Long,Doubleh_d)
    {
        
        final 
int E u_e.size();

        
double[][] f_te IPUtils.computeECMPRoutingTableMatrix(nodeIdslinkMaplinkWeightMap);

        List<
Longd_p = new ArrayList<Long>();
        List<
Doublex_p = new ArrayList<Double>(); 
        List<List<
Long>> pathList = new ArrayList<List<Long>>();
        
        
GraphUtils.convert_fte2xp(nodeIds,linkMapdemandMaph_df_ted_px_p pathList);
    

        
double[] y_e GraphUtils.convert_xp2ye(linkMapx_ppathList);

        
double [] _u_e = new double [u_e.size()];
        for(
int e=0;e<Ee++)
                
_u_e[e] = u_e.get(linkIdsVector[e]);
        
        return 
DoubleUtils.maxValue(DoubleUtils.divide(y_e_u_e));
        
    }