Appliquer l'action de Qmax

Fermé
wella_salwa Messages postés 15 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 30 mars 2024 - Modifié le 24 nov. 2022 à 15:27
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 25 nov. 2022 à 18:15

Bonjour,

J'ai deux actions windowincrease et windowdecrease décrites par : 

void
ConsumerPcon::WindowIncrease()
{
  if (m_ccAlgorithm == CcAlgorithm::AIMD) {
    if (m_window < m_ssthresh) {
      m_window += 1.0;
    }
    else {
      m_window += (1.0 / m_window);
    }
  }
  else if (m_ccAlgorithm == CcAlgorithm::CUBIC) {
    CubicIncrease();
  }
  else if (m_ccAlgorithm == CcAlgorithm::BIC) {
    BicIncrease();
  }
  else {
    BOOST_ASSERT_MSG(false, "Unknown CC Algorithm");
  }
  NS_LOG_DEBUG("Window size increased to " << m_window);
}

void
ConsumerPcon::WindowDecrease()
{
  if (!m_useCwa || m_highData > m_recPoint) {
    const double diff = m_seq - m_highData;
    BOOST_ASSERT(diff > 0);

    m_recPoint = m_seq + (m_addRttSuppress * diff);

    if (m_ccAlgorithm == CcAlgorithm::AIMD) {
      // Normal TCP Decrease:
      m_ssthresh = m_window * m_beta;
      m_window = m_ssthresh;
    }
    else if (m_ccAlgorithm == CcAlgorithm::CUBIC) {
      CubicDecrease();
    }
    else if (m_ccAlgorithm == CcAlgorithm::BIC) {
      BicDecrease();
    }
    else {
      BOOST_ASSERT_MSG(false, "Unknown CC Algorithm");
    }

    // Window size cannot be reduced below initial size
    if (m_window < m_initialWindow) {
      m_window = m_initialWindow;
    }

    NS_LOG_DEBUG("Window size decreased to " << m_window);
  }
  else {
    NS_LOG_DEBUG("Window decrease suppressed, HighData: " << m_highData << ", RecPoint: " << m_recPoint);
  }
}


Je veux créer une méthode action qui selon un état i, exécute soit l'action windowincrease, soit windowdecrease, puis après calcule les valeurs Q[i][j] d'un  tableau définir par Q[i][j] =  k*R[i], et enfin retourne la valeur maximale de Q.

Le problème que j'ai, c'est que je dois savoir l'état i équivalent à la valeur max de Q et savoir son action équivalente pour que je puisse l'appliquer à chaque état 

Merci

3 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
24 nov. 2022 à 15:43

Bonjour,

De ce que je comprends la méthode pourrait ressembler à :

void ConsumerPcon::action(int i) {
  if (i < 0) {
    windowIncrease();
  } else {
    windowDecrease();
  }
  ...
}

... mais on ne sait pas comment la décision doit être prise par rapport à i puisque tu ne l'as pas précisé.

les valeurs Q[i][j] d'un  tableau définir par Q[i][j] =  k*R[i], et enfin retourne la valeur maximale de Q.

Ta formule dépend de j à gauche de l'égalité, mais pas à droite. Alors comment est défini j ? Et d'où vient le paramètre k ? Est-ce un paramètre de la méthode action ou un membre de ta classe ConsumerPcon ? Même question concernant R ?

les valeurs Q[i][j] d'un  tableau définir par Q[i][j] =  k*R[i], et enfin retourne la valeur maximale de Q.

Quel est le type de Q et où est-il défini ? Est-ce une variable locale à action ?

De manière générale pour chercher un max dans une liste (non vide) tu peux utiliser std::max_element :

#include <algorithm>
#include <iostream>
#include <list>

int main() {
   std::list<int> l = {1, 2, 0, 3, 2};
   std::list<int>::iterator it_max = std::max_element(l.begin(), l.end());
   if (it_max != l.end()) {
       int max = *it_max;
       std::cout << "max = " << max << std::endl; // Affiche max = 3
   } else {
       std::cerr << "max not found" << std::endl;
   }    
   return 0;       
}

Cette discussion montre comment généraliser le code précédent pour une matrice.

Le problème que j'ai, c'est que je dois savoir l'état i équivalent à la valeur max de Q et savoir son action équivalente pour que je puisse l'appliquer à chaque état 

Je n'ai pas compris. Peut-être que si tu donnes un exemple ce sera plus clair.

Bonne chance

0
wella_salwa Messages postés 15 Date d'inscription lundi 31 octobre 2022 Statut Membre Dernière intervention 30 mars 2024
Modifié le 25 nov. 2022 à 10:34

Bonjour , 

la décision selon i est : 

if ( i<10){
WindowDecrease () 
}
else {
WindowIncrease () 
}

j et k sont deux entiers , i et j sont utilisé dans le parcours de tableau Q 

int j = 2;
int k = 50 ; 
int i = 30 ; 

R et k sont deux paramètres de la méthode action , Q est un paramètre globale 

int R[30] ;
 

par exemple : après avoir calculé le max de Q , je veux une instruction qui retourne l'indice i de Qmax nommé indice_max,  pour que je puisse exécuter son action càd action(indice_max) 

Merci pour votre réponse

0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
25 nov. 2022 à 18:15

Bonjour,

J'espère que tu es conscience que tes messages sont difficile à suivre pour quelqu'un qui n'est pas dans ton projet.

  • Quelle sont les dimensions du tableau Q ?
  • En admettant que ce soit une matrice (tableau 2D), comment est défini le contenu de chaque case Q(i, j) ? À quoi sert j dans ce tableau (qu'est ce qui différencie deux colonnes de Q) ?
  • Quand tu cherches l'indice i de Q, je suppose que tu veux dire la case (i, j) qui correspond au max(Q(i, j)) ? Du coup c'est un couple et pas un index ?
  • Quel rapport entre Q et le test pour WindowsIncrease et WindowDecrease ?

Peut-être que si tu donnes un exemple minimal, j'arriverai à comprendre ce que tu veux faire.

Bonne chance

0