04.03.2020, 14:54
Hallo Kai,
in der Anlage mein Lösungsvorschlag und hier noch einige Bemerkungen:
A) Zum Lösungsansatz:
Alle möglichen Variatione zu berechnen ist auf einem PC zeitlich nicht möglich, daher habe ich eine Optimierung mit einem evollutionären Algorithmus eingesetzt. Da dieser Algorithmus mit zufälligen Vertauschungen arbeitet, ist nicht gewährleistet, dass er immer das optimale und/oder das gleiche Ergebnis liefert. Nach meinem Verständnis liefert er aber immer ein akzeptables Ergebnis.
Durch wiederholtes Berechnen (hierbei nicht vergessen die Zuordnung mit dem besten Ergebnis zwischenspeichern siehe Spalte AH) kann man zufällige nicht ganz so gute Lösungen vermeiden.
Mit deinen Beispieldaten ist nach einigen Versuchen eine maximale Abweichung von 1 mAh möglich. Sehr häufig hatten die Ergebnisse maximale Abweichungen zwischen 3 und 5 mAh.
B) Anforderung des Programmes
Im Programm ist die Anzahl der serielen und parallelen Zelllen nicht beschränkt, falls eine der Zahlen grösser als 20 ist, müssen die Formeln ab G9, die nur der Darstellung des Programmergebnisses (Spalte E) dienen, erweitert werden.
Da ich ungern in Programmen mit festen Adressen arbeite, benötigt das Programm zur Zeit drei benannte Zellen und zwei benannte Bereiche:
1. benannte Zellen "Seriell" und "Parallel"
Hier müssen ganze Zahlen grösser als 1 eingetragen werden.
2. benannte Zelle "Zeit"
Auch hier muss eine ganze Zahle eingetragen werden. Wenn die Optimierung in einem Zeitraum von diesen Sekunden keine Verbesserung findet wird sie abgebrochen. Das Programm läuft also mindestens diese Sekunden.
3. benannter Bereich "Liste"
Hier müssen die Kapazitäten der Zellen untereinander eingetragen sein. Der Bereich muss mindestens ns*np Zeilen haben.
4. benanter Bereich "Ausgabe"
Hier werden die gefundenen Gruppennummern der Zellen eingetragen. Der Bereich muss genau soviel Zeilen wie der Bereich "Liste" haben.
in der Anlage mein Lösungsvorschlag und hier noch einige Bemerkungen:
A) Zum Lösungsansatz:
Alle möglichen Variatione zu berechnen ist auf einem PC zeitlich nicht möglich, daher habe ich eine Optimierung mit einem evollutionären Algorithmus eingesetzt. Da dieser Algorithmus mit zufälligen Vertauschungen arbeitet, ist nicht gewährleistet, dass er immer das optimale und/oder das gleiche Ergebnis liefert. Nach meinem Verständnis liefert er aber immer ein akzeptables Ergebnis.
Durch wiederholtes Berechnen (hierbei nicht vergessen die Zuordnung mit dem besten Ergebnis zwischenspeichern siehe Spalte AH) kann man zufällige nicht ganz so gute Lösungen vermeiden.
Mit deinen Beispieldaten ist nach einigen Versuchen eine maximale Abweichung von 1 mAh möglich. Sehr häufig hatten die Ergebnisse maximale Abweichungen zwischen 3 und 5 mAh.
B) Anforderung des Programmes
Im Programm ist die Anzahl der serielen und parallelen Zelllen nicht beschränkt, falls eine der Zahlen grösser als 20 ist, müssen die Formeln ab G9, die nur der Darstellung des Programmergebnisses (Spalte E) dienen, erweitert werden.
Da ich ungern in Programmen mit festen Adressen arbeite, benötigt das Programm zur Zeit drei benannte Zellen und zwei benannte Bereiche:
1. benannte Zellen "Seriell" und "Parallel"
Hier müssen ganze Zahlen grösser als 1 eingetragen werden.
2. benannte Zelle "Zeit"
Auch hier muss eine ganze Zahle eingetragen werden. Wenn die Optimierung in einem Zeitraum von diesen Sekunden keine Verbesserung findet wird sie abgebrochen. Das Programm läuft also mindestens diese Sekunden.
3. benannter Bereich "Liste"
Hier müssen die Kapazitäten der Zellen untereinander eingetragen sein. Der Bereich muss mindestens ns*np Zeilen haben.
4. benanter Bereich "Ausgabe"
Hier werden die gefundenen Gruppennummern der Zellen eingetragen. Der Bereich muss genau soviel Zeilen wie der Bereich "Liste" haben.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.