IncreasingVoltage .. schrieb:
> Gibt es eine Möglichkeit, excel dazu zu bringen, selber die
> Kombinationen an Zellenverschaltungen auszuprobieren, um bei jedem der
> 4p etwa auf die selbe Gesamtkapazität zu kommen?
Mit den vordefinierten Excel-Funktion geht das vermutlich nicht, aber du
könntest in VBA einen Algorithmus programmieren, der sämtliche mögliche
Kombinationen durchrechnet und daraus das Optimum bestimmt.
Wenn ich dich richtig verstanden habe, möchtest du jeweils p=4 Zellen zu
einer Gruppe parallel und s=4 dieser Gruppen in Serie schalten. Für die
erste dieser dieser Gruppen gibt es
Möglichkeiten, die p Zellen aus dem Gesamtvorrat von s·p Zellen
auszuwählen. Für die zweite Gruppen stehen nur noch s·p-p Zellen zur
Auswahl, also gibt es dafür
Möglichkeiten. Für die dritte Gruppe gibt es entsprechend
Möglichkeiten usw.
Für die letzte (d.h. die s-te) Gruppe gibt es nur noch
d.h. eine einzige Möglichkeit.
Die Anzahl n der möglichen Kombinationen für die gesamte Anordnung der
Zellen ist das Produkt der vorgenannten Anzahlen dividiert durch die
Anzahl s! der möglichen Permutationen der Gruppen in der Serienschaltung
(die Reihenfolge der einzelnen Gruppen in der Serienschaltung spielt ja
keine Rolle). Also ist
Für s=p=4 ist n=2627625. Diese Zahl ist nicht so arg groß, so dass eine
gute Chance besteht, brute-force-mäßig alle Kombinationen in akzeptabler
Zeit durchrechnen lassen zu können.
Da ich weder Excel habe noch VBA beherrsche, kann ich dir diesbezüglich
leider nicht weiterhelfen. Sozusagen als Proof-of-Concept habe ich den
Algorithmus mal in Haskell implementiert, nicht besonders effizient,
aber gut genug, um damit ein paar Beispielberechnungen für s≤4 und p≤4
durchführen zu können (für größere s und p steigt die Rechenzeit schnell
an).
Hier sind eine paar Erläuterungen zu dem Algorithmus für den Fall, dass
du ihn in VBA nachprogrammieren möchtest:
Die Funktion combis generiert eine Liste aller n Kombinationen. Sie
nutzt dafür die Hilfsfunktion choose, die alle Möglichkeiten liefert,
aus einer Liste von Zellen (repräsentiert durch ihre Kapazitäten) k
Zellen auszuwählen. choose liefert dabei nicht nur die ausgewählten
Zellen, sondern auch jeweils eine Liste mit den verbleibenden Zellen.
Die Funktion combis wählt nun mit Hilfe von choose einen Satz von p
Zellen für die erste Gruppe aus und ruft sich rekursiv auf, um dasselbe
auch für die s·p-p verbleibenden Zellen zu tun. Die Rekursion bricht ab,
wenn alle Zellen "verbraucht" sind.
Um die beste Kombination zu ermitteln, wird auf alle Kombinationen die
Funktion range angewandt. Diese berechnet die Gesamtkapazität jeder
der s Gruppen als Summe der Einzelkapazitäten und bestimmt davon die
Differenz aus dem Maximum und dem Minimum. Diese Differenz ist ein Maß
für die "Unbalanciertheit" der Gruppen untereinander und sollte deswegen
möglichst klein sein. Die Kombination mit der geringsten /range/-Wert
landet schließlich in der Variable best, die mittels der Funktion
printSums zusammen mit den berechneten Summenkapazitäten jeder Gruppe
ausgegeben wird.
Die Anzahl p der in jeder Gruppe parallel geschalteten Zellen sowie die
gemessenen Kapazitäten der s·p Zellen werden beim Programmstart von
stdin als Integer-Zahlenwerte eingelesen. Am besten schreibt man alle
diese Werte vorher in eine Textdatei battdata.txt und ruft das Programm
aus der Konsole mit
1 | battarrange <battdata.txt
|
auf.
Die Kapazitätswerte in der angehängten Datei battdata.txt kommen aus dem
Gauß-Zufallsgenerator mit den Parametern x̅=2500 und σ=40, so dass sie
statistisch den 13 Werten in deinem Excel-Screenshot ähnlich sind.
Nach etwa 3s (auf i5-Prozessor) erscheint folgendes Ergebnis:
1 | 2448 + 2518 + 2514 + 2546 = 10026
|
2 | 2548 + 2521 + 2439 + 2516 = 10024
|
3 | 2461 + 2492 + 2508 + 2564 = 10025
|
4 | 2490 + 2514 + 2530 + 2490 = 10024
|
Das sieht doch gar nicht schlecht aus, oder?
Die Unterschiede der Gruppenkapazitäten von nur ±1 sind typisch bei
diesen Kapazitätsstreuungen und zeigen, dass es sich durchaus lohnt,
sich Gedanken über die optimale Anordnung der Zellen zu machen. Die
Kapazitäsänderungen durch Alterung dürften sehr viel größer sein, aber
mit etwas Glück altern alle Zellen etwa gleich schnell, so dass die
Gruppenkapazitäten nicht zu sehr auseinanderlaufen.
Wenn du kein Haskell installieren und das Programm auch nicht in VBA
umschreiben möchtest, kann ich für dich gerne ein paar Programmläufe
durchführen, wenn du deine Kapazitätsdaten hier postest.