Maximale KM-Kosten

El Hadji

Bekanntes Mitglied
Servus Community,
Ich hätte mal wieder eine Frage zu einer Aufgabe.
Die erste Methode getTeilroute müsste so stimmen wie ich es programmiert habe.
Aber zur Methode getMaxKmKosten, habe ich nicht wirklich eine Idee. Eventuell die kmKosten auf Double_MAX.VALUE setzen und dann die liste durchlaufen und immer die Kosten um 1 verringern? Habt ihr eine Idee für mich?
dxzylw3eqp3tmday7.png

Hier mein Code:
Code:
import java.util.*;

public class Routenoptimierung
{
   private ArrayList<Strecke> liste;
  
    public Routenoptimierung()
    {
        liste = new ArrayList<Strecke>();
       
    }

  
    public Strecke [] getTeilroute(Strecke [] route, double kmKosten)
    {
        for (int i = 0; i < route.length; i++)
        {
            double gewinn = route[i].getWert()-(route[i].getLaenge()*kmKosten);
            if( gewinn > 0)
            {
                liste.add(route[i]);
            }
        }
       
        Strecke [] teilroute = new Strecke [liste.size()];
        Iterator <Strecke> it = liste.iterator();
        for (int i = 0; it.hasNext(); i++)
        {
            teilroute[i] = it.next();
        }
       
        return teilroute;
    }
}

Ich wär euch echt dankbar.
mfg
 

mihe7

Top Contributor
Die erste Methode getTeilroute müsste so stimmen wie ich es programmiert habe.
Nein. Du sollst nicht beliebige Elemente, deren Gewinn > 0 ist, zu einer Route zusammenfügen sondern die zusammenhängende Teilroute mit dem größten Gewinn auswählen - Nachtrag: sofern es eine solche überhaupt gibt...

Damit erübrigt sich erst mal Deine Frage zu getMaxKmKosten :)
 

El Hadji

Bekanntes Mitglied
Wieder mal Danke für die schnell Antwort.
Aber leider stehe ich auch wieder am Schlauch, ich kann nur den Gesamtgewinn oder sagen wir gesamtVerlust berechnen^^
Code:
  double gesamtgewinn = 0;
        for (int i = 0; i < route.length; i++)
        {
            gesamtgewinn += route[i].getWert()-(route[i].getLaenge()*kmKosten);
        }
Ich wäre über neue Ansatzvorschläge echt dankbar. Hab grad 1 Stunde herumprobiert -.-
 

El Hadji

Bekanntes Mitglied
Wieder mal Danke für die schnell Antwort.
Aber leider stehe ich auch wieder am Schlauch, ich kann nur den Gesamtgewinn oder sagen wir gesamtVerlust berechnen^^
Code:
  double gesamtgewinn = 0;
        for (int i = 0; i < route.length; i++)
        {
            gesamtgewinn += route[i].getWert()-(route[i].getLaenge()*kmKosten);
        }
Ich wäre über neue Ansatzvorschläge echt dankbar. Hab grad 1 Stunde herumprobiert -.-
ok bzw. so
Code:
 double besteMenge = Double.MAX_VALUE;
        for (int i = 0; i < route.length-1; i++)
        {
            double teilmenge = route[i].getWert()-(route[i].getLaenge()*kmKosten);
           
            for (int j = i+1; j < route.length; j++)
            {
                teilmenge += route[j].getWert()-(route[j].getLaenge()*kmKosten);
               
            }
           
            if(teilmenge < besteMenge)
            {
                besteMenge = teilmenge;
            }
      
        }

Dadurch hätte ich zusammenhängende Teilmengen überprüft. Nur leider hab ich keinen Schimmer wie ich die einzelnen Strecken speichern sollte
 

mihe7

Top Contributor
Du sollst nicht wild herumprobieren, sondern ein Problem lösen.

Nimm mal ein Blatt Papier (das ist dieses Cellulose-Zeug, auf das sich mit einem geeigneten Schreibgerät Farbe aufbringen lässt), und mal Dir mal eine Route mit sagen wir mal sechs Strecken auf.

Die Strecken verbindest Du dabei entlang der Route mit Linien und nummerierst sie, beginnend bei 0, durch. Die erste Strecke hat die 0, die zweite die 1 usw.

Eine zusammenhängende Teilstrecke ist damit durch Angabe von zwei Strecken eindeutig festgelegt: z. B. erste Teil der Teilstrecke ist Strecke Nr. 2, letzter Teil der Teilstrecke ist Strecke Nr. 4.

Jetzt überleg Dir einfach mal, wie Du die beste Teilstrecke finden kannst - ohne Computer.
 

mihe7

Top Contributor
Nicht konkrete Werte nehmen. Wenn Du zwei beliebige Teilstrecken als Start und Ziel nimmst, wie hoch ist dann der Gewinn - ganz allgemein beschrieben? Gesucht sind jetzt Start und Ziel, so dass Gewinn maximal wird... Wie funktioniert das? Wenn ich noch mehr schreibe, dann kann ich gleich die Lösung posten.
 

mihe7

Top Contributor

El Hadji

Bekanntes Mitglied
So ich hab mich nochmal dran gewagt. was hält ihr von meiner optimalen Teilroute?
Ist der Ansatz dieses Mal richtig?
Code:
          ArrayList<Strecke> teilroute = new ArrayList<Strecke>();
          double maxGewinn =0;
          double streckenGewinn = 0;
          int start = 0;
          int ende = 0;
          for (int i = 0; i < route.length-1; i++)
          {
              double streckengewinn = 0;
              int count = 0;
              for(int j = route.length-1; j >= i; j--)
              {
                  streckengewinn += (route[j].getWert()-kmKosten*route[j].getLaenge());
                  count++;
               }
              
               if(streckengewinn > maxGewinn)
               {
                   maxGewinn = streckengewinn;
                   start=i;
                   ende=i+count;
                }
            }
          
            for (int i = start; i <ende; i++)
            {
                teilroute.add(route[i]);
            }
           
            Strecke [] fertig = new Strecke [teilroute.size()];
            Iterator<Strecke> it = teilroute.iterator();
            for (int i = 0; it.hasNext(); i++)
            {
                fertig[i] = it.next();
            }
           
            return fertig;
      
       
       
      
       
       
    }
}
 

mihe7

Top Contributor
deswegen springe ich ja von hinten nach vorne durch.
Ob Du von vorne oder von hinten "durchspringst" spielt keine Rolle: du summierst einfach die Streckengewinne auf.

Hier:
Java:
              double streckengewinn = 0;
              int count = 0;
              for(int j = route.length-1; j >= i; j--)
              {
                  streckengewinn += (route[j].getWert()-kmKosten*route[j].getLaenge());
                  count++;
               }

Du berechnest damit die Summe der "Streckengewinne" aller Teilstrecken zwischen route[i] und route[route.length-1]. Die Reihenfolge der j hat darauf keinen Einfluss.
 

El Hadji

Bekanntes Mitglied
mihe7 hat gesagt.:
Du berechnest damit die Summe der "Streckengewinne" aller Teilstrecken zwischen route[i] und route[route.length-1]. Die Reihenfolge der j hat darauf keinen Einfluss.

Genau und die maximale Streckengewinne müssen doch auch automatisch die optimale Teilroute sein
 

El Hadji

Bekanntes Mitglied
Ok ich glaub jetzt hab ichs gecheckt!
Code:
  ArrayList<Strecke> teilroute = new ArrayList<Strecke>();
          double maxGewinn =0;
          double streckenGewinn = 0;
          int start = 0;
          int ende = 0;
          for (int i = 0; i < route.length; i++)
          {
              double streckengewinn = 0;
              int count = 0;
              for(int j = i; j < route.length; j++)
              {
                  streckengewinn += (route[j].getWert()-kmKosten*route[j].getLaenge());
                  count++;
                 
                  if(streckengewinn > maxGewinn)
               {
                   maxGewinn = streckengewinn;
                   start=i;
                   ende=i+count;
                }
               }
              
            }
          
            for (int i = start; i <ende; i++)
            {
                teilroute.add(route[i]);
            }
           
            Strecke [] fertig = new Strecke [teilroute.size()];
            Iterator<Strecke> it = teilroute.iterator();
            for (int i = 0; it.hasNext(); i++)
            {
                fertig[i] = it.next();
            }
           
            return fertig;
      
       
       
      
       
       
    }
}
 

El Hadji

Bekanntes Mitglied
jo hast recht, aber ich wollt nur zeigen dass ich die Problematik verstanden hab.

Aber bei Frage 2 also maximale KM Kosten berechnen, kann ich mir nicht vorstellen was gemeint ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Maximale Anzahl von Konsonanten im String Java Basics - Anfänger-Themen 6
RudiRüssel maximale Anzahl von Schlüsseln in einer Hash Tabelle Java Basics - Anfänger-Themen 2
B substring() maximale Zeichenlänge festlegen? Java Basics - Anfänger-Themen 1
F Maximale Länge eines Strings Java Basics - Anfänger-Themen 5
D Maximale Teilsumme ermitteln Java Basics - Anfänger-Themen 6
A Maximale zeichenanzahl im TextField? Java Basics - Anfänger-Themen 4
A Threads Minimale und maximale Anzahl. Java Basics - Anfänger-Themen 28
Q jTextArea maximale Textlänge Java Basics - Anfänger-Themen 3
G maximale Anzahl der Tage im Monat Java Basics - Anfänger-Themen 18
N Maximale Zahl in einem String Java Basics - Anfänger-Themen 8
T Methoden Maximale Ziffer von int-Wert Java Basics - Anfänger-Themen 8
B Maximale Länge eines integer Arrays ? Java Basics - Anfänger-Themen 31
M Maximale Anzahl von add-Befehlen? Java Basics - Anfänger-Themen 11
B maximale Zeichenfläche Java Basics - Anfänger-Themen 3
Q Maximale Eingabelänge eines JTextFields Java Basics - Anfänger-Themen 2
G Maximale Größe von klasse Java Basics - Anfänger-Themen 7
G JTextField Abfrage auf maximale Integergröße? Java Basics - Anfänger-Themen 17
Franky868 JTextfield maximale Zeichenanzahl Java Basics - Anfänger-Themen 1
R maximale Länge des INHALTS im JTextField Java Basics - Anfänger-Themen 2
M Maximale String länge finden? Java Basics - Anfänger-Themen 8
G Maximale Fenstergröße eines JFrame Java Basics - Anfänger-Themen 4
P Maximale Threadzahl Java Basics - Anfänger-Themen 10
G jedem while element eine maximale rechenzeit zusichern Java Basics - Anfänger-Themen 16
N maximale Anzahl Schlüssel in einem Hashtable Java Basics - Anfänger-Themen 7
B 'kosten' Parameter? Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben