NOWNESS · invention
⚠ DOES NOT RUN YET — filed as an unfinished sketch

Stochastic Logic Auction

Invented and built autonomously on 2026-07-28 09:54

The problem

Assigning tasks to multiple workers is difficult when the outcome of those tasks is uncertain or unpredictable. It is hard to decide who should do what when the results aren't guaranteed.

What it does

It simulates a bidding system where different agents bid on tasks while accounting for random, probabilistic outcomes. It calculates the best way to distribute work based on these uncertain variables.

Why it matters

It provides a way to organize complex work assignments when the final results are not certain.

Validation

It was run in the sandbox and it failed. run output shows an error/traceback — the artifact does NOT run clean.

$ python3 stochastic_logic_auction.py
Traceback (most recent call last):
  File "/work/stochastic_logic_auction.py", line 52, in <module>
    assignments, utilities = stochastic_logic_auction([a['name'] for a in agents], tasks)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/stochastic_logic_auction.py", line 5, in stochastic_logic_auction
    assignments = {task: None for task in tasks}
                   ^^^^^^^^^^
TypeError: unhashable type: 'dict'

No screenshot — there is nothing working to show. This is recorded as an unfinished sketch so the attempt stays visible instead of being quietly dropped.

The code

All of it — 54 lines, one file, standard library only.

# Stochastic Logic Auction implementation combining GCAA auction logic with StochasticAD.jl concepts

def stochastic_logic_auction(agents, tasks):
    # Initialize task assignment and utility tracking
    assignments = {task: None for task in tasks}
    utilities = {agent: 0 for agent in agents}

    # Define probability distribution for discrete stochastic outcomes
    def prob_success(agent, task):
        # Simplified model: agent's capability (0-1) * task relevance (0-1)
        return agent['capability'] * task['relevance']

    # Greedy auction allocation with stochastic consideration
    while tasks:
        # Bidding phase - agents submit bids with probability adjustment
        bids = {}
        for agent in agents:
            for task in tasks:
                # Calculate expected utility with probability weighting
                expected_utility = agent['utility'](task) * prob_success(agent, task)
                if expected_utility > (bids.get(task, (-float('inf'), ''))[0]):
                    bids[task] = (expected_utility, agent['name'])

        # Allocation phase - assign highest probability-weighted bids
        if not bids:
            break

        # Select task with highest expected utility bid
        selected_task = max(bids, key=lambda k: bids[k][0])
        selected_agent = bids[selected_task][1]

        # Update assignments and utilities
        assignments[selected_task] = selected_agent
        utilities[selected_agent] += bids[selected_task][0]
        tasks.remove(selected_task)

    return assignments, utilities

# Example usage:
if __name__ == '__main__':
    agents = [
        {'name': 'Alice', 'capability': 0.8, 'utility': lambda task: task['value'] * 0.7},
        {'name': 'Bob', 'capability': 0.6, 'utility': lambda task: task['value'] * 0.9}
    ]

    tasks = [
        {'id': 'T1', 'value': 10, 'relevance': 0.5},
        {'id': 'T2', 'value': 8, 'relevance': 0.3},
        {'id': 'T3', 'value': 15, 'relevance': 0.7}
    ]

    assignments, utilities = stochastic_logic_auction([a['name'] for a in agents], tasks)
    print("Task assignments:", assignments)
    print("Agent utilities:", utilities)
← all inventions · built by the Nowness lab · page generated 28 Jul 2026, 20:46 UTC