Add infeasible support

This commit is contained in:
Timothyxxx
2024-02-14 11:59:50 +08:00
parent 30d3464114
commit 3f59ff46dc
4 changed files with 18 additions and 22 deletions

View File

@@ -175,10 +175,16 @@ class DesktopEnv(gym.Env):
if isinstance(self.evaluator["func"], list) \ if isinstance(self.evaluator["func"], list) \
else getattr(metrics, self.evaluator["func"]) else getattr(metrics, self.evaluator["func"])
self.metric_conj: str = self.evaluator.get("conj", "and") # take conjunction of multiple metrics self.metric_conj: str = self.evaluator.get("conj", "and") # take conjunction of multiple metrics
self.result_getter: Getter = [getattr(getters, "get_{:}".format(res["type"])) for res in if "result" in self.evaluator:
self.result_getter: Getter = [getattr(getters, "get_{:}".format(res["type"])) for res in
self.evaluator["result"]] \ self.evaluator["result"]] \
if isinstance(self.evaluator["result"], list) \ if isinstance(self.evaluator["result"], list) \
else getattr(getters, "get_{:}".format(self.evaluator["result"]["type"])) else getattr(getters, "get_{:}".format(self.evaluator["result"]["type"]))
else:
self.result_getter = [None] * len(self.metric) \
if isinstance(self.metric, list) \
else None
if "expected" in self.evaluator: if "expected" in self.evaluator:
self.expected_getter: Getter = [getattr(getters, "get_{:}".format(exp["type"])) if exp else None for exp in self.expected_getter: Getter = [getattr(getters, "get_{:}".format(exp["type"])) if exp else None for exp in
self.evaluator["expected"]] \ self.evaluator["expected"]] \
@@ -293,6 +299,12 @@ class DesktopEnv(gym.Env):
self.setup_controller.setup(self.evaluator.get("postconfig", [])) self.setup_controller.setup(self.evaluator.get("postconfig", []))
if self.metric == "infeasible":
if self.action_history[-1] == "FAIL":
return 1
else:
return 0
if type(self.metric) == list: if type(self.metric) == list:
results = [] results = []
for idx, metric in enumerate(self.metric): for idx, metric in enumerate(self.metric):
@@ -315,7 +327,8 @@ class DesktopEnv(gym.Env):
return 0 return 0
elif self.metric_conj == 'or' and float(metric) == 1.0: elif self.metric_conj == 'or' and float(metric) == 1.0:
return 1 return 1
else: results.append(metric) else:
results.append(metric)
return sum(results) / len(results) if self.metric_conj == 'and' else max(results) return sum(results) / len(results) if self.metric_conj == 'and' else max(results)
else: else:
try: try:

View File

@@ -9,7 +9,7 @@
"os" "os"
], ],
"evaluator": { "evaluator": {
"func": "", "func": "infeasible",
"result": { "result": {
}, },
"expected": { "expected": {

View File

@@ -8,7 +8,7 @@
"os" "os"
], ],
"evaluator": { "evaluator": {
"func": "", "func": "infeasible",
"result": { "result": {
}, },
"expected": { "expected": {

View File

@@ -5,32 +5,15 @@
"source": "https://help.ubuntu.com/lts/ubuntu-help/power-percentage.html.en", "source": "https://help.ubuntu.com/lts/ubuntu-help/power-percentage.html.en",
"trajectory": "trajectories/", "trajectory": "trajectories/",
"config": [ "config": [
{
"type": "execute",
"parameters": {
"command": [
"python",
"-c",
"import pyautogui; import time; pyautogui.click(960, 540); time.sleep(0.5);"
]
}
}
], ],
"related_apps": [ "related_apps": [
"os" "os"
], ],
"evaluator": { "evaluator": {
"func": "exact_match", "func": "infeasible",
"result": { "result": {
"type": "vm_command_line",
"command": "gsettings get org.gnome.desktop.interface show-battery-percentage",
"shell": true
}, },
"expected": { "expected": {
"type": "rule",
"rules": {
"expected": "true\n"
}
} }
} }
} }