Ruggedness
A rugged landscape has many local peaks and abrupt changes in fitness between neighbors. Ruggedness makes it more likely that stepwise improvement stops short of the best candidate.
Explore ruggednessA fitness landscape maps the candidates in a design space, such as protein variants or reaction conditions, to their measured performance. GraphFLA builds this landscape from your data and characterizes its topography, revealing what makes a problem easy or hard to model and to optimize. These insights help you develop better predictive models and search algorithms.
$ pip install graphfla
20+
measures of landscape structure
7
landscape types for sequences, categorical, ordinal and mixed data
8
model landscapes and benchmark problems
12
step-by-step tutorials on published data
curated datasets across diverse domains
How it works
Explore how amino acid variation affects protein function and stability.
1Provide your data
Protein variant screening data, pairing amino acid sequences with measurements such as catalytic activity, binding affinity or thermostability.
Your data
| Protein sequence | Activity |
|---|---|
| MKTAYIAKQRQISFVKSHFS | 23% |
| MKTAFIAKQRQISFVKSHFS | 41% |
| MKTAYIGKQRQISFVKSHFS | 36% |
| MKTAYIAKQKQISFVKSHFS | 57% |
| MKTAFIGKQRQISFVKSHFS | 42% |
| MKTAFIAKQKQISFVKSHFS | 64% |
| MKTAYIGKQKQISFVKSHFS | 73% |
| MKTAFIGKQKQISFVKSHFS | 91% |
2Build the landscape
GraphFLA connects variants that differ by a single amino acid substitution, mapping the measured property across sequence space.
3Analyze its topography
Characterize epistasis, mutational robustness and the accessibility of optimal sequences.
Landscape profile
Local optima4 / 32
Roughness0.68
Neutrality19%
Fitness-distance correlation−0.25
Variable interactions
Explore how reagents and reaction conditions affect chemical reactivity and selectivity.
1Provide your data
Reaction screening data, with columns describing reagents and reaction conditions alongside an outcome such as yield, conversion or selectivity.
Your data
| Catalyst | Solvent | Temp. | Yield |
|---|---|---|---|
| Nickel | Water | 40 °C | 32% |
| Nickel | Ethanol | 60 °C | 48% |
| Copper | Water | 60 °C | 54% |
| Copper | Ethanol | 80 °C | 81% |
| Palladium | Water | 40 °C | 65% |
| Palladium | Ethanol | 60 °C | 72% |
| Nickel | Acetone | 80 °C | 51% |
| Copper | Acetone | 40 °C | 74% |
2Build the landscape
GraphFLA connects experiments that differ in a single reagent choice or a step in one reaction condition.
3Analyze its topography
Characterize interactions between reaction factors, sensitivity to local changes and the accessibility of optimal conditions.
Landscape profile
Local optima3 / 36
Autocorrelation0.61
Neutrality12%
Fitness-distance correlation−0.70
Variable interactions
Explore how alloy composition affects material properties.
1Provide your data
Composition–property data, pairing elemental proportions with measurements such as hardness, strength or conductivity.
Your data
| Copper | Zinc | Nickel | Hardness |
|---|---|---|---|
| 60% | 25% | 15% | 145 HV |
| 60% | 20% | 20% | 170 HV |
| 65% | 20% | 15% | 158 HV |
| 65% | 15% | 20% | 185 HV |
| 70% | 20% | 10% | 135 HV |
| 70% | 15% | 15% | 162 HV |
| 55% | 25% | 20% | 176 HV |
| 55% | 20% | 25% | 198 HV |
2Build the landscape
GraphFLA connects neighboring compositions through small adjustments in elemental proportions, mapping the chosen property across composition space.
3Analyze its topography
Identify composition–property trends, interactions between alloying elements and regions with stable material performance.
Landscape profile
Local optima2 / 28
Autocorrelation0.83
Neutrality24%
Fitness-distance correlation−0.46
Variable interactions
Explore how software configuration options affect system performance.
1Provide your data
Configuration benchmark data, pairing software settings with performance measurements such as execution time, throughput or memory usage.
Your data
| Cache | Parallel | Debug | Time |
|---|---|---|---|
| Off | Off | On | 92 s |
| On | Off | On | 61 s |
| Off | On | On | 55 s |
| Off | Off | Off | 78 s |
| On | On | On | 32 s |
| On | Off | Off | 49 s |
| Off | On | Off | 43 s |
| On | On | Off | 24 s |
2Build the landscape
GraphFLA connects configurations that differ in a single option, mapping performance across configuration space.
3Analyze its topography
Characterize interactions between configuration options, performance sensitivity and the accessibility of optimal configurations.
Landscape profile
Local optima3 / 48
Autocorrelation0.72
Neutrality16%
Fitness-distance correlation−0.62
Variable interactions
Explore how model hyperparameters affect predictive performance.
1Provide your data
Hyperparameter evaluation data, pairing model and training settings with validation metrics such as accuracy or prediction error.
Your data
| Depth | Trees | Leaf | Error |
|---|---|---|---|
| 4 | 50 | 1 | 25.4 |
| 4 | 100 | 4 | 23.8 |
| 8 | 50 | 1 | 18.2 |
| 8 | 100 | 2 | 15.6 |
| 12 | 50 | 2 | 17.4 |
| 12 | 100 | 4 | 16.1 |
| 16 | 50 | 1 | 16.7 |
| 16 | 100 | 4 | 16.2 |
2Build the landscape
GraphFLA connects neighboring configurations through a change in one hyperparameter, mapping predictive performance across the search space.
3Analyze its topography
Characterize hyperparameter interactions, sensitivity to tuning and the accessibility of high-performing configurations.
Landscape profile
Local optima2 / 36
Autocorrelation0.56
Neutrality21%
Fitness-distance correlation−0.39
Variable interactions
Quick start
Simply load your dataset, specify the variables and the objective, and build the landscape. The same steps apply to laboratory measurements, simulations and model evaluations.
$ pip install graphfla
import pandas as pdfrom graphfla import analysisfrom graphfla.landscape import ProteinLandscape df = pd.read_csv("variants.csv")X = df["sequence"] # Amino-acid sequence of each variantf = df["activity"] # Measured activity, to maximize landscape = ProteinLandscape(maximize=True)landscape.build_from_data(X, f)analysis.profile(landscape, seed=42)
import pandas as pdfrom graphfla import analysisfrom graphfla.landscape import Landscape df = pd.read_csv("reactions.csv")X = df[["catalyst", "solvent"]] # Reaction conditionsf = df["yield"] # Product yield, to maximize landscape = Landscape(maximize=True)landscape.build_from_data( X, f, data_types={c: "categorical" for c in X})analysis.profile(landscape, seed=42)
import pandas as pdfrom graphfla import analysisfrom graphfla.landscape import OrdinalLandscape df = pd.read_csv("alloys.csv") # columns: W, Re, Os, hardnessX = df[["W", "Re"]] # Os = 100 - W - Re, so it is impliedf = df["hardness"] # Hardness at 1,000 °C, to maximize landscape = OrdinalLandscape(maximize=True)landscape.build_from_data(X, f)analysis.profile(landscape, seed=42)
import pandas as pdfrom graphfla import analysisfrom graphfla.landscape import BooleanLandscape df = pd.read_csv("builds.csv")flags = ["gvn", "inline", "instcombine", "jump_threading", "sccp", "simplifycfg"]X = df[flags] # One on/off column per compiler flagf = df["time"] # Compilation time, to minimize landscape = BooleanLandscape(maximize=False)landscape.build_from_data(X, f)analysis.profile(landscape, seed=42)
import pandas as pdfrom graphfla import analysisfrom graphfla.landscape import Landscape df = pd.read_csv("grid_search.csv")X = df[["depth", "leaf", "features"]] # Hyperparametersf = df["rmse"] # Validation error, to minimize landscape = Landscape(maximize=False)landscape.build_from_data( X, f, data_types={c: "ordinal" for c in X})analysis.profile(landscape, seed=42)
Choose the class that matches your data.
What you can measure
Each feature is implemented from established studies in evolutionary biology and optimization. Together they let you explore your problem from complementary angles and understand it fully.
A rugged landscape has many local peaks and abrupt changes in fitness between neighbors. Ruggedness makes it more likely that stepwise improvement stops short of the best candidate.
Explore ruggednessVariables interact when the effect of changing one depends on the values of others, known as epistasis in biology. Interactions that reverse the direction of an effect can block improving paths and create multiple peaks.
Explore interactionsNavigability describes how easily a search can find the global optimum. The landscape may provide useful guidance or misleading signals that steer the search elsewhere.
Explore navigabilityNeutral changes leave fitness essentially unchanged. Large flat regions can stall a search, but they also connect distant candidates of equal quality.
Explore neutralityWhy landscape topography matters
Landscape features help explain why predictive models and search algorithms perform differently across problems. They reveal interactions that complicate prediction, local optima that can trap search, and broad trends that can guide optimization.
ProteinGym · Prediction performance across protein assays
18 near-complete combinatorial DMS assays
Performance
Landscape construction in GraphFLA is heavily optimized for speed and memory efficiency, enabling analysis of large combinatorial spaces on a single machine.
59,161×
faster construction at 1,048,576 candidates
2,384×
lower peak memory on the same build
Complete binary landscapes with 8 to 20 variables. Apple M4 Pro, Python 3.9, single thread. Peak memory includes Python and its dependencies. The baseline is a nested Python loop with a dense distance matrix.
Case studies
GraphFLA provides a unified framework for analyzing combinatorial optimization problems across domains, with flexible representations of variables, objectives and neighborhood relationships.
GB1 · Protein G domain B1
DHFR · Trimethoprim selection in E. coli
Ribozymes · HDV and class III ligase
Suzuki–Miyaura coupling
Electrochemical flow hydrogenation
Tungsten–rhenium–osmium alloys
Hybrid perovskites · ABX₃
BacPUS · Gut bacteria and polysaccharides
Cyanimide library · Mouse USP18
NCI-ALMANAC · Cancer cell assays
NAS-Bench-201 · CIFAR-10
LLVM · Compiler flags
NeurIPS 2025 · Spotlight
ISSTA 2025
KDD 2025
IJCAI 2023