car_env / quantum_agent.py
Hajorda's picture
Upload folder using huggingface_hub
1a0d68d verified
import pennylane as qml
import torch
import torch.nn as nn
# --- KUANTUM DEVRESİ AYARLARI ---
n_qubits = 4 # 4 Qubit kullanacağız
n_layers = 2 # Derinlik (Karmaşıklık)
dev = qml.device("default.qubit", wires=n_qubits) # Simülatör
# Kuantum Devresi Tanımı (QNode)
@qml.qnode(dev, interface="torch") # PyTorch ile konuşabilmesi için
def quantum_circuit(inputs, weights):
# 1. Veriyi Qubitlere Yükle (Embedding)
# Lidar verisini açılara dönüştürüp qubitleri döndürüyoruz
qml.templates.AngleEmbedding(inputs, wires=range(n_qubits))
# 2. İşlem Katmanı (Weights)
# Yapay Zeka bu ağırlıkları (açıları) öğrenecek
qml.templates.StronglyEntanglingLayers(weights, wires=range(n_qubits))
# 3. Ölçüm (Measurement)
# Pauli-Z ekseninde ölçüm yapıp klasik sayıya çeviriyoruz
return [qml.expval(qml.PauliZ(wires=i)) for i in range(n_qubits)]
# --- HİBRİT KATMAN (PyTorch Modülü) ---
class HybridQuantumLayer(nn.Module):
def __init__(self):
super().__init__()
# Ağırlıkların şekli: (Katman Sayısı, Qubit Sayısı, 3)
weight_shapes = {"weights": (n_layers, n_qubits, 3)}
# PennyLane devresini PyTorch katmanına çeviriyoruz
self.q_layer = qml.qnn.TorchLayer(quantum_circuit, weight_shapes)
def forward(self, x):
# x: Klasik veri
# Çıktı: Kuantum işleminden geçmiş veri
return self.q_layer(x)