File indexing completed on 2026-07-26 08:22:17
0001 import argparse
0002 import csv
0003 import logging
0004 import pathlib
0005
0006 log = logging.getLogger("find_pareto_set")
0007
0008
0009 def main():
0010 parser = argparse.ArgumentParser()
0011
0012 parser.add_argument(
0013 "db",
0014 type=pathlib.Path,
0015 help="the CSV database file",
0016 )
0017
0018 parser.add_argument(
0019 "-v",
0020 "--verbose",
0021 help="enable verbose output",
0022 action="store_true",
0023 )
0024
0025 args = parser.parse_args()
0026
0027 logging.basicConfig(
0028 level=logging.DEBUG if (args.verbose or False) else logging.INFO,
0029 format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
0030 )
0031
0032 results = []
0033
0034 total_results = 0
0035
0036 with open(args.db, "r") as f:
0037 reader = csv.DictReader(f)
0038 for i in reader:
0039 total_results += 1
0040 if i["success"] != "0":
0041 results.append({k: float(v) for k, v in i.items()})
0042
0043 log.info(
0044 "Database contained %d results of which %d are valid",
0045 total_results,
0046 len(results),
0047 )
0048
0049 pareto_set = []
0050
0051 for i, m in enumerate(results):
0052 for j, n in enumerate(results):
0053 if i == j:
0054 continue
0055
0056 if (
0057 n["rec_throughput"] <= m["rec_throughput"]
0058 and n["efficiency"] >= m["efficiency"]
0059 and n["fake_rate"] <= m["fake_rate"]
0060 and n["duplicate_rate"] <= m["duplicate_rate"]
0061 ):
0062 log.debug(
0063 "Removing %s from the Pareto set because %s is superior",
0064 str(n),
0065 str(m),
0066 )
0067 break
0068 else:
0069 pareto_set.append(m)
0070
0071 log.info("Pareto set contains %d elements:", len(pareto_set))
0072
0073 for i in sorted(pareto_set, key=lambda x: x["rec_throughput"], reverse=True):
0074 log.info(
0075 " Eff. %.2f, fake rate %.2f, duplicate rate %.2f with reciprocal througput %.1fms is achieved by setup {%s}",
0076 100.0 * i["efficiency"],
0077 i["fake_rate"],
0078 i["duplicate_rate"],
0079 i["rec_throughput"] * 1000.0,
0080 ", ".join(
0081 "%s: %s" % (k, str(v))
0082 for k, v in i.items()
0083 if k
0084 not in [
0085 "efficiency",
0086 "fake_rate",
0087 "duplicate_rate",
0088 "rec_throughput",
0089 "success",
0090 ]
0091 ),
0092 )
0093
0094
0095 if __name__ == "__main__":
0096 main()