Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Experimental 3SAT solver #2

Merged
merged 15 commits into from
Sep 10, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
[REFACTOR] Backend-code moved to module backend
Yoric committed May 16, 2024
commit c1e2535bc910e30ead584f9ad27a1690af619704
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion src/device/mod.rs → src/backend/device/mod.rs
Original file line number Diff line number Diff line change
@@ -6,7 +6,7 @@ use serde::Serialize;

use layout::Layout;

use crate::pulser::device::{ChannelId, PhysicalChannel, RydbergBeam, RydbergEom};
use crate::backend::pulser::device::{ChannelId, PhysicalChannel, RydbergBeam, RydbergEom};

pub struct Device {
interaction_coeff: c6::C6Coeff,
5 changes: 5 additions & 0 deletions src/backend/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
//! Compiler back-end.
pub mod device;
pub mod pulser;
pub mod qaa;
pub mod qubo;
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion src/pulser/pulse.rs → src/backend/pulser/pulse.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ use std::rc::Rc;

use serde::Serialize;

use crate::pulser::waveform::Waveform;
use crate::backend::pulser::waveform::Waveform;

pub struct Pulse {
channel: Rc<str>,
File renamed without changes.
2 changes: 1 addition & 1 deletion src/pulser/sequence.rs → src/backend/pulser/sequence.rs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ use std::{collections::HashMap, rc::Rc};

use serde::Serialize;

use crate::{
use crate::backend::{
device::Device,
pulser::{device::ChannelId, pulse::Pulse, register::Register},
};
File renamed without changes.
2 changes: 1 addition & 1 deletion src/qaa/mod.rs → src/backend/qaa/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::rc::Rc;

use crate::{
use crate::backend::{
device::Device,
pulser::{pulse::Pulse, register::Register, sequence::Sequence, waveform::Waveform},
qubo::Constraints,
File renamed without changes.
12 changes: 7 additions & 5 deletions src/qubo/mod.rs → src/backend/qubo/mod.rs
Original file line number Diff line number Diff line change
@@ -19,8 +19,11 @@ use rayon::prelude::*;
use serde::Deserialize;

use crate::{
device::Device, pulser::register::Register, types::units::Coordinates,
types::units::Micrometers, types::Quality,
backend::{device::Device, pulser::register::Register},
types::{
units::{Coordinates, Micrometers},
Quality,
},
};

pub mod format;
@@ -78,7 +81,7 @@ impl Constraints {
self.num_nodes * self.num_nodes / 2
}

pub fn layout(&self, device: &Device, options: &Options) -> Option<(Register, Quality)> {
pub fn layout(&self, device: &Device, options: &Options) -> Option<(Register, Quality, u64)> {
(options.seed..std::u64::MAX)
.into_par_iter()
.find_map_any(|seed| {
@@ -127,8 +130,7 @@ impl Constraints {
};

if quality >= options.min_quality {
eprintln!("succeeded with seed {seed}");
Some((register, quality))
Some((register, quality, seed))
} else {
None
}
5 changes: 1 addition & 4 deletions src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
pub mod device;
pub mod pulser;
pub mod qaa;
pub mod qubo;
pub mod backend;
pub mod types;
13 changes: 7 additions & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
@@ -2,9 +2,9 @@ use std::path::PathBuf;

use clap::Parser;
use qlafoutea::{
device::Device,
qaa,
qubo::{self, format},
backend::device::Device,
backend::qaa,
backend::qubo::{self, format},
types::Quality,
};

@@ -44,7 +44,7 @@ fn main() -> Result<(), anyhow::Error> {

// Step: compile the qubo to a register.
eprintln!("...compiling {} constraints", constraints.len());
let (register, quality) = constraints
let (register, quality, seed) = constraints
.layout(
&device,
&qubo::Options {
@@ -55,9 +55,10 @@ fn main() -> Result<(), anyhow::Error> {
)
.expect("Failed to compile qubo");
eprintln!(
"...compiled to {} qubits with a quality of {}",
"...compiled to {} qubits with a quality of {} (using seed {})",
register.len(),
quality
quality,
seed
);

// Step: integrate QAA.
15 changes: 11 additions & 4 deletions tests/test.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
use qlafoutea::{device::Device, qaa, qubo, types::Quality};
use qlafoutea::{
backend::{
device::Device,
qaa,
qubo::{self, Constraints},
},
types::Quality,
};

#[test]
fn test_main() {
let half_duration_ns = 4_000;
let constraints = qlafoutea::qubo::Constraints::try_new(
let constraints = Constraints::try_new(
5,
vec![
-10.0,
@@ -38,7 +45,7 @@ fn test_main() {
let device = Device::analog();

eprintln!("...compiling {} constraints", constraints.len());
let (register, quality) = constraints
let (register, quality, _) = constraints
.layout(
&device,
&qubo::Options {
@@ -54,7 +61,7 @@ fn test_main() {
quality
);

// Step: integrate QAOA.
// Step: integrate QAA.
let sequence = qaa::compile(
&constraints,
device,