Conversation
|
@PStange Hier ist der Bugfix von fixed relative profile. |
|
Das Problem scheint wieder aufzutreten. Ich habe in einem Beispiel verschiedene Lastgänge gegeben, aus welchen er einen auswählen soll. fixed_size=1 im Kombination mit fixed_relative_profile führt trotz optional=True nur zu der zulässigen Lösung, dass alle Lastgänge gewählt werden. Beispiel: for k in zeitreihen: |
|
Kannst du ein minimalbeispiel erstellen? |
|
Schau mal in #248 |
|
Ich dächte auch, dass Du das schonmal gefixt hattest. Ich stelle noch ein Beispiel zusammen. |
|
Das läuft bei mir mit beiden optionen flixopt == 2.1.1 import numpy as np
import pandas as pd
import xarray as xr
import flixopt as fx
def test_cases(case: int):
timesteps = pd.date_range('2020-01-01', periods=10, freq='h', name='time')
flow_system = fx.FlowSystem(timesteps)
profile = np.sin(np.linspace(0, 2 * np.pi, len(timesteps))) * 0.5 + 0.5
flow_system.add_elements(
fx.Effect('Costs', '€', 'Kosten', is_standard=True, is_objective=True),
fx.Bus('Fernwärme'),
fx.Sink(
'Sink',
sink=fx.Flow(
'Wärme',
bus='Fernwärme',
size=fx.InvestParameters(fixed_size=1, optional=True),
fixed_relative_profile=xr.DataArray(profile, coords=(timesteps,)),
)
)
)
calculation = fx.FullCalculation('GenericName', flow_system)
calculation.do_modeling()
calculation.model.add_constraints(calculation.model.variables['Sink(Wärme)|size'] == case)
calculation.solve(fx.solvers.HighsSolver(0, 20))
print(f'{calculation.results.solution['Sink(Wärme)|size'].item()=}')
return calculation
if __name__ == '__main__':
test_cases(1)
test_cases(0) |
|
Bin noch nicht dazu gekommen, ein abgespecktes Beispiel zu bauen. Dieses hier bringt bei mir zunächst erstmal Fehlermeldungen: typing_extensions fehlt als moduleund danach xarray has no attribute DataTree. Ich teste das in einer virtuellen environment in Pycharm mit der aktuellen flixopt Version 2.1.2 (installiert per pip). Was funktionieren soll, ist, dass er die sink nicht nutzt. Dazu gibts ja keinen Grund in Deinem Beispiel (verursacht keine Kosten) und die ist bestimmt im Ergebnis dabei, oder? |
|
Hier ist ein Beispiel (relativ kompakt). Aufgrund desEffects Sanierung, darf nur eine sink ausgewählt werden. Das führt zu einem Fehler. Grund dafür ist, dass fixed_size ungleich Null und fixed_relative_profile meiner Meinung nach das Investment erzwingen, auch wenn optional=True. Setzt man die obere Grenze im Sanierungseffekt auf >2 läuft es (da dann beide sinks genutzt werden dürfen). import flixOpt as fx
datetime_series = fx.create_datetime_array('2023-01-01', 2, freq='h')
Waerme = fx.Bus('Waerme')
Gesamtkosten = fx.Effect('costs', '€', 'Kosten', is_standard=True, is_objective=True)
Sanierung = fx.Effect('Sanierungsvariante', '-', 'Wahl_der_Sanierung', minimum_invest=0.9, maximum_invest=2.1)
Sanierung1 = fx.Sink('San1',
sink=fx.Flow('Q_th',
bus=Waerme,
size=fx.InvestParameters(fix_effects={Gesamtkosten: 200, Sanierung:1},
fixed_size=1,
optional=True),
fixed_relative_profile=[1, 1],
)
)
Sanierung2 = fx.Sink('San2',
sink=fx.Flow('Q_th',
bus=Waerme,
size=fx.InvestParameters(fix_effects={Gesamtkosten: 300, Sanierung:1},
fixed_size=1,
optional=True),
fixed_relative_profile=[2, 2],
)
)
Waermebezug = fx.Source('Waer',
source=fx.Flow('Q_th',
bus=Waerme,
size=100,
effects_per_flow_hour=0.15))
flow_system = fx.FlowSystem(datetime_series)
flow_system.add_effects(Gesamtkosten,Sanierung)
flow_system.add_components(Sanierung1,Sanierung2,Waermebezug)
calculation = fx.FullCalculation('fullModel', flow_system, 'pyomo')
calculation.do_modeling()
calculation.solve(fx.solvers.HighsSolver(time_limit_seconds=3600,mip_gap=0.05))
results = fx.results.CalculationResults(calculation.name, folder='results') |
|
Hallo @PStange, Irgendwas ist mit deiner installation falsch. import flixoptDas alte mit import flixOpt(großes O) Auch fx.create_datetime_array() und add_effects()gibt es nicht mehr. Schick mal was bei |
|
dieses blöde "O" -> jetzt habe ich erstmal ganz andere Probleme |
|
Ich bekomme mein Mini-Beispiel gerade nicht zum Laufen mit flixopt 2.1.1, aber wenn ich in deinem Test fix_effects in der Senke einfüge, müsste er diese doch eigentlich nicht nutzen, oder? |
No description provided.