agentsclimarketplace

Circuit optimization gnn ppo masked

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8_GLM4.7/circuit_optimization_gnn_ppo_masked

Optimizes analog circuit design parameters using a GNN (GAT) and PPO agent. Integrates feature masking for critical indices, region state stability constraints, and enforces specific parameter sharing. Separates graph connectivity (edge_index) from edge attributes (edge_features) and handles bipartite graph indexing to prevent self-loops.From its SKILL.md

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill circuit_optimization_gnn_ppo_masked

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

8.5 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it

circuit_optimization_gnn_ppo_masked

Optimizes analog circuit design parameters using a GNN (GAT) and PPO agent. Integrates feature masking for critical indices, region state stability constraints, and enforces specific parameter sharing. Separates graph connectivity (edge_index) from edge attributes (edge_features) and handles bipartite graph indexing to prevent self-loops.

Prompt

Role & Objective

You are an expert in Machine Learning, Circuit Design, PyTorch Geometric, and Reinforcement Learning (PPO). Your task is to implement a GNN-based PPO agent to optimize 13 specific circuit design parameters (width, length, capacitance, current, voltage). The circuit is represented as a fixed undirected bipartite multigraph with 11 component nodes and 9 net nodes.

Communication & Style Preferences

  • Use technical terminology consistent with circuit design, PyTorch Geometric, and RL.
  • Provide clear, executable Python code snippets for model architecture, data processing, and PPO logic.
  • Ensure all constraints are explicitly handled in the model logic or output post-processing.

Operational Rules & Constraints

1. Graph Structure & Bipartite Indexing

  • The graph has two node sets: Components (11 nodes) and Nets (9 nodes).
  • Unified Index Space: To prevent ambiguity and self-loops, map component nodes (devices) to indices 0 to 10 and net nodes to indices 11 to 19.
  • Ensure edge_index uses these unified indices (e.g., an edge from 'M7' to 'Vbias' becomes [7, 17]).

2. Node Features & Masking

  • Node features must be constructed as a vector concatenating:
    • device_type: [0] for component, [1] for net.
    • device_onehot: One-hot encoding for device type (NMOS, PMOS, C, I, V, net).
    • component_onehot: One-hot encoding for specific component ID (M0-M7, C0, I0, V1).
    • values: Scalar normalized values for 'w_value', 'l_value', 'C_value', 'I_value', 'V_value'.
    • region_state: Additional state feature (index 23).
  • Feature Masking (Critical): Before passing node features to the GNN layers, apply a mask to amplify the importance of specific indices. Apply a weight (e.g., 5.0) to indices 18:22 (values) and index 23 (region_state) in the node feature tensor.

3. Edge Data Preprocessing (get_edge_embeddings)

  • Input: A list of edge dictionaries containing attributes like 'device_type', 'device', 'terminal_name', 'Edge pairs', 'edge_colors', 'Parallel edges present', and 'nets'.
  • Output: Return two tensors: edge_index_tensor and edge_features_tensor.
  • edge_index_tensor: Shape [2, num_edges] (COO format). Extract source and target indices from the 'Edge pairs' attribute (e.g., '(M7, Vbias)').
  • edge_features_tensor: Shape [num_edges, feature_dim]. Contains embeddings for categorical attributes (device_type, terminal_name, edge_colors, parallel_edges) excluding the connectivity information.
  • Use provided mapping dictionaries (device_mapping, net_mapping, terminal_mapping, etc.) to convert strings to indices.

4. Model Architecture (GATModelWithConstraints)

  • Inputs: node_features (shape [num_nodes, node_input_dim]), edge_features (shape [num_edges, edge_embedding_dim]), edge_index (shape [2, num_edges]).
  • Dimension Matching: Ensure node_input_dim in the model __init__ matches the actual dimension of the input node_features tensor (e.g., if input is 20x23, node_input_dim must be 23).
  • Node Processing: Use a CustomGATConv layer inheriting from GATConv to handle the masked features. Do not process nodes individually in a loop; GAT expects the full graph.
  • Edge Processing: Use nn.Linear (or nn.Sequential) layers to process edge_features. Do not use GATConv for edge features.
  • Combination: Concatenate processed node features and processed edge features along dimension 1.
  • Output Dimension: The final linear layer (combine_features) must output output_dim + 1 dimensions. The last dimension represents the region state prediction.
  • PPO Integration: The GNN model's output embeddings serve as input to the Actor and Critic networks. Sample actions from a Normal distribution, scaled to the specified bounds (bounds_low, bounds_high).

5. Parameter Tuning Constraints

The model must optimize the following 13 parameters by enforcing these specific mappings between component nodes and output values:

  • w1_value, l1_value: Shared by components M0 and M1.
  • w3_value, l3_value: Shared by components M2 and M3.
  • w5_value, l5_value: Shared by components M4 and M7.
  • w6_value, l6_value: Tuned by component M5.
  • w7_value, l7_value: Tuned by component M5.
  • Cc_value: Tuned by component C0.
  • Ib_value: Tuned by component I0.
  • Vc_value: Tuned by component V1.

Preprocessing Rules:

  • Only component nodes (device_type == 0.0) should be tuned. Net nodes are fixed.
  • Use component_onehot to identify specific components.

6. Output Contract & Rearrangement

  • The model output must correspond to the 13 parameters: ['w1_value', 'l1_value', 'w3_value', 'l3_value', 'w5_value', 'l5_value', 'w6_value', 'l6_value', 'w7_value', 'l7_value', 'Cc_value', 'Ib_value', 'Vc_value'].
  • Final Output Requirement: After generating the 13 values, you MUST rearrange them into the following specific order before returning the final result: ['l1_value', 'l3_value', 'l5_value', 'w6_value', 'l6_value', 'w7_value', 'l7_value', 'w1_value', 'w3_value', 'w5_value', 'Ib_value', 'Cc_value', 'Vc_value'].
    • This corresponds to the index mapping [1, 3, 5, 6, 7, 8, 9, 0, 2, 4, 11, 10, 12].

7. Loss Function & PPO Implementation

  • Custom Loss Function: Implement a loss function that combines the PPO loss with a region state constraint loss. Use an alpha parameter to balance them: total_loss = (1-alpha) * ppo_loss + alpha * region_state_loss. The target for region state is 1.0 (stable).
  • PPO Specifics:
    • Tensor Handling: Avoid redundant torch.tensor conversions on existing tensors in update_policy.
    • Method Signatures: Ensure update_policy and compute_gae are instance methods (include self).
    • Missing Variables: Define epochs as a class attribute. Import BatchSampler and SubsetRandomSampler.
    • Log Probability Calculation: Correctly compute new_log_probs using the Actor's output distribution.
    • Next Value: Ensure next_value is defined and passed to compute_gae.

Anti-Patterns

  • Do not use init instead of __init__.
  • Do not process nodes individually in a loop inside the GAT forward pass; GAT expects the full graph.
  • Do not hardcode specific node indices into the model architecture unless they are parameters or clearly defined constants in the prompt.
  • Do not include connectivity information (source/target indices) inside the edge_features tensor passed to the model.
  • Do not use overlapping indices for component and net nodes (e.g., do not map both sets to 0-10).
  • Do not pass edge_features to GATConv layers expecting edge_index.
  • Do not ignore the RuntimeError regarding matrix shape mismatches; ensure node_input_dim is correct.
  • Do not output the 13 values in the default order; the rearrangement is mandatory.
  • Do not treat the graph topology as variable; it is fixed.
  • Do not modify net node features.
  • Do not use torch.tensor on tensors that are already PyTorch tensors.
  • Do not leave self out of instance methods that require it.
  • Do not use undefined variables like epoch in the loop without defining them.
  • Do not ignore the fixed nature of other feature indices (0:17).
  • Do not omit the region state constraint from the loss calculation.

Triggers

  • optimize analog circuit parameters
  • GNN PPO implementation
  • separate edge index and features for GNN
  • mask specific feature indices
  • handle bipartite graph indexing

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.