Commit 01f7ee63 authored by Ibrahim's avatar Ibrahim
Browse files

src/systems/fmu_wrapper.py: reset function reads initial state; placeholder reward function

parent 11be5caa
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ dependencies:
    - tensorboard
    - tensorboardX
    - higher==0.2.1
    - stable-baselines3
    - git+https://git.isis.vanderbilt.edu/SmartBuildings/bdx.git@v0.2.6
    - https://github.com/OpenModelica/OMPython/archive/v3.0.3.zip
    - https://github.com/OpenModelica/jupyter-openmodelica/archive/5b90c36f65913e02b5c26757f5babae1f7c5c245.zip
+1 −0
Original line number Diff line number Diff line
@@ -93,6 +93,7 @@ model CoolingTowerActual

  parameter Real TSetpoint = 273.15 + 18;
  parameter Real TWetbulb = 273.15 + 15;
  // TODO: assign tempcondin to mixing volume port
  parameter Real TempCondIn = 300;
  parameter Real TempCondOut = 300;

+47 −17
Original line number Diff line number Diff line
@@ -59,11 +59,17 @@ class FMUEnv(gym.Env):
        self.reset()


    def _construct_state_vector(self) -> np.ndarray:
        pass


    def reset(self):
        self.t = 0
        self.model.reset()
        self.step_independent_state(self.t)
        self._model_state = self.model.get(self._model_vars)
        self.state = self._construct_state_vector()
        return self.state


    def step_independent_state(self, t: int):
@@ -75,6 +81,10 @@ class FMUEnv(gym.Env):
        self.model.set(self._model_vars, self._model_state)


    def reward(self, state, action, nstate) -> float:
        pass



class CoolingTowerFirst(FMUEnv):
    """
@@ -97,12 +107,25 @@ class CoolingTowerFirst(FMUEnv):
        self.flow_setpoint = None


    def _construct_state_vector(self):
        state = np.asarray([
            self.model.get('TWetbulb')[0],      # Wetbulb
            self.model.get('TLeaving')[0],      # tower leaving temperature
            self.temp_cond_out,                 # Current entering temperature
            self.model.get('controller.y')[0],  # fan speed
        ])
        return state


    def reset(self, temp_cond_out=300, temp_cond_in=300):
        self.temp_cond_out = temp_cond_out
        self.temp_cond_in = temp_cond_in
        self.temp_setpoint = temp_cond_in
        self.flow_setpoint = 1.
        return super().reset()
        self.state = super().reset()
        # before simulate is called, TLeaving is not initialzied to TempCondIn
        self.state[1] = self.model.get('TempCondIn')
        return self.state


    def step_independent_state(self, t: int):
@@ -123,17 +146,14 @@ class CoolingTowerFirst(FMUEnv):

        self._model_state = self.model.get(self._model_vars)

        state = np.asarray([
            self.model.get('TWetbulb')[0], # Wetbulb
            self.model.get('TLeaving')[0],        # tower leaving temperature
            self.temp_cond_out,               # Current entering temperature
            self.model.get('controller.y')[0],   # fan speed
        ])
        old_state = self.state
        self.state = self._construct_state_vector()
        reward = self.reward(self.state, action, old_state)
        self.temp_setpoint, self.flow_setpoint = action
        self.temp_cond_out = self.model.get('TEntering')[0]
        self.temp_cond_in = self.model.get('TLeaving')[0]
        self.t += 1
        return state
        return self.state, reward, False, None

        
        
@@ -158,12 +178,25 @@ class CoolingTowerActual(FMUEnv):
        self.flow_setpoint = None


    def _construct_state_vector(self) -> np.ndarray:
        state = np.asarray([
            self.model.get('TWetbulb')[0],      # Wetbulb
            self.model.get('tow.TLvg')[0],      # Last tower leaving temperature
            self.temp_cond_out,                 # Current entering temperature
            self.model.get('controller.y')[0],  # fan speed
        ])
        return state


    def reset(self, temp_cond_out=300, temp_cond_in=300):
        self.temp_cond_out = temp_cond_out
        self.temp_cond_in = temp_cond_in
        self.temp_setpoint = temp_cond_in
        self.flow_setpoint = 1.
        return super().reset()
        self.state = super().reset()
        # before simulate is called, tow.TLvg is not initialzied to TempCondIn
        self.state[1] = self.model.get('TempCondIn')
        return self.state


    def step_independent_state(self, t: int):
@@ -175,6 +208,7 @@ class CoolingTowerActual(FMUEnv):
    def step(self, action):
        super().step(action)
        self.model.set('TempCondOut', self.temp_cond_out)
        # TODO: doesn't seem to have an effect. TLvg is an output variable
        self.model.set('tow.TLvg', self.temp_cond_in)
        self.model.set('TSetpoint', action[0])
        self.model.set('MassFlowrate', action[1])
@@ -183,15 +217,11 @@ class CoolingTowerActual(FMUEnv):
        res = self.model.simulate(start_time=0, final_time=self.tstep, options={'silent_mode': True})

        self._model_state = self.model.get(self._model_vars)

        state = np.asarray([
            self.model.get('TWetbulb')[0], # Wetbulb
            self.model.get('tow.TLvg')[0],        # Last tower leaving temperature
            self.temp_cond_out,               # Current entering temperature
            self.model.get('controller.y')[0],   # fan speed
        ])
        old_state = self.state
        self.state = self._construct_state_vector()
        reward = self.reward(self.state, action, old_state)
        self.temp_setpoint, self.flow_setpoint = action
        self.temp_cond_out = self.model.get('vol.T')[0]
        self.temp_cond_in = self.model.get('tow.TLvg')[0]
        self.t += 1
        return state
 No newline at end of file
        return self.state, reward, False, None
 No newline at end of file