โš ๏ธ์ด ์‚ฌ์ดํŠธ์˜ ์ผ๋ถ€ ๋งํฌ๋Š” Affiliate ํ™œ๋™์œผ๋กœ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.

Cirq ๋งˆ์Šคํ„ฐ๐Ÿš€: ๋‚˜๋งŒ์˜ ์–‘์ž ๊ฒŒ์ดํŠธ & ์ปดํŒŒ์ผ๋Ÿฌ ํ™œ์šฉ๋ฒ•

Cirq ๋งˆ์Šคํ„ฐ๐Ÿš€: ๋‚˜๋งŒ์˜ ์–‘์ž ๊ฒŒ์ดํŠธ & ์ปดํŒŒ์ผ๋Ÿฌ ํ™œ์šฉ๋ฒ•

์–‘์ž์ปดํ“จํ„ฐ, ๋ญ”๊ฐ€ ์—„์ฒญ ๋ฉ‹์žˆ์–ด ๋ณด์ด๋Š”๋ฐ ๋ง‰์ƒ ์‹œ์ž‘ํ•˜๋ ค๋‹ˆ ์—„๋‘๊ฐ€ ์•ˆ ๋‚œ๋‹ค๊ตฌ์š”? ๐Ÿ˜ฅ ์ตœ์ฒจ๋‹จ ๊ธฐ์ˆ  ๋†“์น ๊นŒ ๋ถˆ์•ˆํ•œ ๋‹น์‹ ์„ ์œ„ํ•ด ์ค€๋น„ํ–ˆ์–ด์š”! Cirq๋งŒ ์žˆ๋‹ค๋ฉด ๋‹น์‹ ๋„ ์–‘์ž์ปดํ“จํŒ… ์ „๋ฌธ๊ฐ€๐Ÿ˜Ž! ์ง€๊ธˆ ๋ฐ”๋กœ ๋‚˜๋งŒ์˜ ์–‘์ž ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ํšŒ๋กœ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด์š”! ๋Šฆ์œผ๋ฉด ํ›„ํšŒํ• ์ง€๋„ ๋ชฐ๋ผ์š” ๐Ÿ˜‰

โœจํ•ต์‹ฌ ์š”์•ฝ 3๊ฐ€์ง€โœจ

  • ๋‚˜๋งŒ์˜ ์–‘์ž ๊ฒŒ์ดํŠธ ๋งŒ๋“ค๊ธฐ ๐Ÿ› ๏ธ
  • Cirq ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ์–‘์ž ํšŒ๋กœ ์ตœ์ ํ™” โš™๏ธ
  • ์–‘์ž ํšŒ๋กœ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํƒ๊ตฌ ๐Ÿ”

Cirq, ๋„ˆ ๋Œ€์ฒด ๋ญ๋‹ˆ? ๐Ÿค”

Cirq๋Š” ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“  ์˜คํ”ˆ ์†Œ์Šค ์–‘์ž ์ปดํ“จํŒ… ํ”„๋ ˆ์ž„์›Œํฌ์˜ˆ์š”. ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์ด๋ผ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ , ์–‘์ž ํšŒ๋กœ ์„ค๊ณ„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ์‹ค์ œ ์–‘์ž ํ•˜๋“œ์›จ์–ด ์—ฐ๋™๊นŒ์ง€ ์ง€์›ํ•˜๋Š” ์•„์ฃผ ๋˜‘๋˜‘ํ•œ ์นœ๊ตฌ์ฃ ! ๐Ÿค“ ๋ณต์žกํ•œ ์–‘์ž ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ Cirq๋งŒ ์žˆ์œผ๋ฉด ๋ ˆ๊ณ  ๋ธ”๋ก ์Œ“๋“ฏ์ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”.


๋‚˜๋งŒ์˜ ๊ฒŒ์ดํŠธ ๋งŒ๋“ค๊ธฐ! ๐Ÿšช

์–‘์ž ๊ฒŒ์ดํŠธ๋Š” ์–‘์ž ํšŒ๋กœ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์˜ˆ์š”. ๊ธฐ์กด์— ์ œ๊ณต๋˜๋Š” ๊ฒŒ์ดํŠธ ์™ธ์— ํŠน๋ณ„ํ•œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‚˜๋งŒ์˜ ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๊ฒ ์ฃ ? Cirq์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”!

1๋‹จ๊ณ„: ๊ฒŒ์ดํŠธ ํด๋ž˜์Šค ์ •์˜

๋จผ์ € cirq.Gate๋ฅผ ์ƒ์†๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ด์š”. ํด๋ž˜์Šค ์ด๋ฆ„์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ง€์œผ๋ฉด ๋˜์ง€๋งŒ, ๊ฒŒ์ดํŠธ์˜ ์—ญํ• ์„ ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฆ„์œผ๋กœ ํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ์ฃ ? ๐Ÿ’ก

import cirq

class MyCustomGate(cirq.Gate):
    def __init__(self, parameter):
        self.parameter = parameter

    def _num_qubits_(self):
        return 1

    def _unitary_(self):
        # ๊ฒŒ์ดํŠธ์˜ ์œ ๋‹ˆํƒ€๋ฆฌ ํ–‰๋ ฌ ์ •์˜
        return ... # ํ–‰๋ ฌ ๊ฐ’ ์ฑ„์šฐ๊ธฐ

    def _circuit_diagram_info_(self, args):
        return "MyGate"

_num_qubits_ ๋ฉ”์†Œ๋“œ๋Š” ๊ฒŒ์ดํŠธ๊ฐ€ ๋ช‡ ๊ฐœ์˜ ํ๋น„ํŠธ์— ์ž‘์šฉํ•˜๋Š”์ง€ ์ •์˜ํ•˜๊ณ , _unitary_ ๋ฉ”์†Œ๋“œ๋Š” ๊ฒŒ์ดํŠธ์˜ ๋™์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ๋‹ˆํƒ€๋ฆฌ ํ–‰๋ ฌ์„ ์ •์˜ํ•ด์š”. _circuit_diagram_info_ ๋ฉ”์†Œ๋“œ๋Š” ํšŒ๋กœ๋„์—์„œ ๊ฒŒ์ดํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ• ์ง€ ๊ฒฐ์ •ํ•˜์ฃ .

2๋‹จ๊ณ„: ์œ ๋‹ˆํƒ€๋ฆฌ ํ–‰๋ ฌ ์ •์˜

์œ ๋‹ˆํƒ€๋ฆฌ ํ–‰๋ ฌ์€ ๊ฒŒ์ดํŠธ์˜ ํ•ต์‹ฌ! ๐Ÿ”‘ ๊ฒŒ์ดํŠธ๊ฐ€ ํ๋น„ํŠธ์˜ ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ค๋Š”์ง€ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”. ๋ณต์žกํ•ด ๋ณด์ด์ง€๋งŒ, ๋„˜ํŒŒ์ด(NumPy)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”.

import numpy as np

def _unitary_(self):
    return np.array([[np.cos(self.parameter), -np.sin(self.parameter)],
                     [np.sin(self.parameter), np.cos(self.parameter)]])

3๋‹จ๊ณ„: ๊ฒŒ์ดํŠธ ์‚ฌ์šฉ

์ด์ œ ๋งŒ๋“  ๊ฒŒ์ดํŠธ๋ฅผ ํšŒ๋กœ์— ์ถ”๊ฐ€ํ•ด ๋ณผ๊นŒ์š”? ํ๋น„ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฒŒ์ดํŠธ๋ฅผ ์ ์šฉํ•˜๋ฉด ๋! ์ฐธ ์‰ฝ์ฃ ? ๐Ÿ˜Š

q = cirq.LineQubit(0)
my_gate = MyCustomGate(parameter=0.1)
circuit = cirq.Circuit(my_gate(q))
print(circuit)

์ฃผ์˜์‚ฌํ•ญ ๐Ÿšจ: ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒŒ์ดํŠธ๋Š” ์–‘์ž ํšŒ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ ์‹ค์ œ ์–‘์ž ํ•˜๋“œ์›จ์–ด ๊ตฌํ˜„์— ์–ด๋ ค์›€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์œ ๋‹ˆํƒ€๋ฆฌ ํ–‰๋ ฌ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ , ํ•˜๋“œ์›จ์–ด ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ด์š”!

์ปดํŒŒ์ผ๋Ÿฌ, ํšŒ๋กœ๋ฅผ ๋˜‘๋˜‘ํ•˜๊ฒŒ! ๐Ÿง 

์–‘์ž ํšŒ๋กœ๋ฅผ ์‹ค์ œ ์–‘์ž ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด, ํ•˜๋“œ์›จ์–ด์— ๋งž๊ฒŒ ์ตœ์ ํ™”ํ•ด์•ผ ํ•ด์š”. ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒŒ ๋ฐ”๋กœ ์–‘์ž ํšŒ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ! Cirq๋Š” ๋‹ค์–‘ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ด์„œ, ํšŒ๋กœ๋ฅผ ์ฒ™์ฒ™ ์•Œ์•„์„œ ์ตœ์ ํ™”ํ•ด ์ค€๋‹ต๋‹ˆ๋‹ค. โœจ

1๋‹จ๊ณ„: ์ปดํŒŒ์ผ๋Ÿฌ ์„ ํƒ

Cirq์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ์–ด์š”. ๊ฐ๊ฐ ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ, ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•ด์•ผ๊ฒ ์ฃ ?

์ปดํŒŒ์ผ๋ŸฌํŠน์ง•์žฅ์ ๋‹จ์ 
cirq.optimize_for_target_gatesetํŠน์ • ๊ฒŒ์ดํŠธ ์„ธํŠธ์— ๋งž์ถฐ ์ตœ์ ํ™”๋ฒ”์šฉ์ , ๋‹ค์–‘ํ•œ ๊ฒŒ์ดํŠธ ์„ธํŠธ ์ง€์›์ตœ์ ํ™” ์ˆ˜์ค€์ด ๋†’์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
cirq.merge_single_qubit_gates๋‹จ์ผ ํ๋น„ํŠธ ๊ฒŒ์ดํŠธ๋“ค์„ ๋ณ‘ํ•ฉํšŒ๋กœ์˜ ๊ฒŒ์ดํŠธ ์ˆ˜๋ฅผ ์ค„์—ฌ ์‹คํ–‰ ์‹œ๊ฐ„ ๋‹จ์ถ•๋‹ค์ค‘ ํ๋น„ํŠธ ๊ฒŒ์ดํŠธ์—๋Š” ์ ์šฉ ๋ถˆ๊ฐ€
cirq.drop_negligible_operations๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๊ฐ๋„์˜ ํšŒ์ „ ๊ฒŒ์ดํŠธ ์ œ๊ฑฐํšŒ๋กœ ๋‹จ์ˆœํ™”, ๋…ธ์ด์ฆˆ ๊ฐ์†Œ ํšจ๊ณผ์ •ํ™•๋„ ๊ฐ์†Œ ๊ฐ€๋Šฅ์„ฑ

2๋‹จ๊ณ„: ์ปดํŒŒ์ผ๋Ÿฌ ์ ์šฉ

์„ ํƒํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํšŒ๋กœ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•ด์š”. cirq.optimize_for_target_gateset ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ฃ .

import cirq

# ํšŒ๋กœ ์ƒ์„ฑ
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
    cirq.H(q0),
    cirq.CNOT(q0, q1),
    cirq.T(q0),
    cirq.H(q0),
    cirq.CNOT(q0, q1)
)

# ์ปดํŒŒ์ผ๋Ÿฌ ์ ์šฉ (์˜ˆ: Google 5-qubit gate set)
optimized_circuit = cirq.optimize_for_target_gateset(
    circuit,
    target_gateset=cirq.google.optimized_for_xmon
)

print("Original circuit:")
print(circuit)
print("nOptimized circuit:")
print(optimized_circuit)

3๋‹จ๊ณ„: ๊ฒฐ๊ณผ ํ™•์ธ

์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „๊ณผ ํ›„์˜ ํšŒ๋กœ๋ฅผ ๋น„๊ตํ•ด ๋ณด์„ธ์š”. ๊ฒŒ์ดํŠธ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฑฐ๋‚˜, ํ•˜๋“œ์›จ์–ด์— ๋” ์ ํ•ฉํ•œ ํ˜•ํƒœ๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๐Ÿ˜Ž

์ฃผ์˜์‚ฌํ•ญ ๐Ÿšจ: ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•˜๋“œ์›จ์–ด ํŠน์„ฑ์— ๋”ฐ๋ผ ์ตœ์ ํ™” ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด์š”. ํŠน์ • ํ•˜๋“œ์›จ์–ด์— ์ตœ์ ํ™”๋œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ฃ .


๋‚˜๋งŒ์˜ ์ปดํŒŒ์ผ๋Ÿฌ ๋งŒ๋“ค๊ธฐ! ๐Ÿ› ๏ธ

Cirq๋Š” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๋‚˜๋งŒ์˜ ํŠน๋ณ„ํ•œ ์ตœ์ ํ™” ์ „๋žต์ด ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ์–ด์š”. ์ด๋Ÿด ๋• ์ง์ ‘ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ต๋‹ˆ๋‹ค!

1๋‹จ๊ณ„: ๋ณ€ํ™˜ ๊ทœ์น™ ์ •์˜

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฒฐ๊ตญ ํšŒ๋กœ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๊ทœ์น™๋“ค์˜ ์ง‘ํ•ฉ์ด์—์š”. ์–ด๋–ค ๊ฒŒ์ดํŠธ๋ฅผ ์–ด๋–ค ๊ฒŒ์ดํŠธ๋กœ ๋ฐ”๊ฟ€์ง€, ์–ด๋–ค ์ˆœ์„œ๋กœ ์ ์šฉํ• ์ง€ ๋“ฑ์„ ์ •์˜ํ•ด์•ผ ํ•˜์ฃ .

2๋‹จ๊ณ„: ๋ณ€ํ™˜ ์—”์ง„ ๊ตฌํ˜„

Cirq๋Š” ๋ณ€ํ™˜ ๊ทœ์น™์„ ํšŒ๋กœ์— ์ ์šฉํ•˜๋Š” ์—”์ง„์„ ์ œ๊ณตํ•ด์š”. ์ด ์—”์ง„์„ ์‚ฌ์šฉํ•ด์„œ ๋‚˜๋งŒ์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ .

3๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ๋ฐ ๊ฐœ์„ 

๋งŒ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋‹ค์–‘ํ•œ ํšŒ๋กœ์— ์ ์šฉํ•ด ๋ณด๊ณ , ์„ฑ๋Šฅ์„ ์ธก์ •ํ•ด์„œ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐ€์•ผ ํ•ด์š”. ๋ˆ๊ธฐ์™€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜์ง€๋งŒ, ๊ทธ๋งŒํผ ๋ณด๋žŒ๋„ ํฌ๊ฒ ์ฃ ? ๐Ÿ’ช

ํ›„๊ธฐ & ์‚ฌ๋ก€ ๐Ÿ“

Cirq๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‚˜๋งŒ์˜ ์–‘์ž ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ํšŒ๋กœ๋ฅผ ์ตœ์ ํ™”ํ•œ ์‚ฌ๋ก€๋Š” ๋ฌด๊ถ๋ฌด์ง„ํ•ด์š”.

  • ์‹ ์•ฝ ๊ฐœ๋ฐœ: ์ƒˆ๋กœ์šด ๋ถ„์ž ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒŒ์ดํŠธ ๊ฐœ๋ฐœ ๐Ÿ’Š
  • ๊ธˆ์œต ๋ชจ๋ธ๋ง: ๋ณต์žกํ•œ ๊ธˆ์œต ํŒŒ์ƒ์ƒํ’ˆ ๊ฐ€๊ฒฉ ๊ฒฐ์ •์„ ์œ„ํ•œ ์–‘์ž ํšŒ๋กœ ์ตœ์ ํ™” ๐Ÿ’ฐ
  • ๋จธ์‹ ๋Ÿฌ๋‹: ์–‘์ž ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ ํ•™์Šต ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฐœ๋ฐœ ๐Ÿค–

๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ธฐ! ๐Ÿ“š

  • ์–‘์ž ํšŒ๋กœ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜: ๋”์šฑ ํšจ์œจ์ ์ธ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœ ๐Ÿš€
  • ์–‘์ž ์˜ค๋ฅ˜ ์ˆ˜์ •: ์–‘์ž ์ปดํ“จํ„ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ ๐Ÿ›ก๏ธ
  • ์–‘์ž ์–ด๋‹๋ง: ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹ โ™จ๏ธ
  • ์‹ค์ œ ์–‘์ž ํ•˜๋“œ์›จ์–ด: Cirq๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹ค์ œ ์–‘์ž ์ปดํ“จํ„ฐ ์ œ์–ดํ•˜๊ธฐ โš™๏ธ
  • ์–‘์ž ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด: Cirq๋ฅผ ๋„˜์–ด์„œ๋Š” ์ƒˆ๋กœ์šด ์–‘์ž ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ํƒ๊ตฌ ๐Ÿ—ฃ๏ธ

์ปจํ…์ธ  ์—ฐ์žฅ โž•

์–‘์ž ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ํ˜„์‹ค์ฒ˜๋Ÿผ! ๐Ÿ–ฅ๏ธ


Cirq๋Š” ์–‘์ž ํšŒ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด์š”. ๋…ธ์ด์ฆˆ ๋ชจ๋ธ์„ ์ ์šฉํ•ด์„œ ์‹ค์ œ ์–‘์ž ํ•˜๋“œ์›จ์–ด์™€ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ฃ .

import cirq

# ๋…ธ์ด์ฆˆ ๋ชจ๋ธ ์ •์˜ (์˜ˆ: depolarization noise)
noise_model = cirq.depolarize(p=0.01)

# ํšŒ๋กœ ์ƒ์„ฑ
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(
    cirq.H(q0),
    cirq.CNOT(q0, q1),
    cirq.measure(q0, q1, key='result')
)

# ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ๋…ธ์ด์ฆˆ ๋ชจ๋ธ ์ ์šฉ
simulator = cirq.Simulator(noise=noise_model)

# ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹คํ–‰
result = simulator.run(circuit, repetitions=1000)
print(result.histogram(key='result'))

์–‘์ž-๊ณ ์ „ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿค

์–‘์ž ์ปดํ“จํ„ฐ์™€ ๊ณ ์ „ ์ปดํ“จํ„ฐ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ๊ทผ ๊ฐ๊ด‘๋ฐ›๊ณ  ์žˆ์–ด์š”. Cirq๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ฃ .

import cirq
import numpy as np

# ์–‘์ž ํšŒ๋กœ ์ •์˜ (์˜ˆ: variational quantum eigensolver)
def create_vqe_circuit(qubits, parameters):
    circuit = cirq.Circuit()
    # ํŒŒ๋ผ๋ฏธํ„ฐํ™”๋œ ํšŒ๋กœ ๊ตฌ์„ฑ
    return circuit

# ๋น„์šฉ ํ•จ์ˆ˜ ์ •์˜
def cost_function(parameters):
    # ์–‘์ž ํšŒ๋กœ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๋ถ„์„
    return cost

# ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์˜ˆ: COBYLA)
import scipy.optimize
result = scipy.optimize.minimize(cost_function, initial_parameters, method='COBYLA')

ํ…์„œ ๋„คํŠธ์›Œํฌ, ๋ณต์žกํ•œ ํšŒ๋กœ ์ •๋ณต! ๐Ÿ•ธ๏ธ

ํ…์„œ ๋„คํŠธ์›Œํฌ๋Š” ๋ณต์žกํ•œ ์–‘์ž ํšŒ๋กœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. Cirq์™€ ํ…์„œ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด, ๋”์šฑ ๋ฐฉ๋Œ€ํ•œ ๊ทœ๋ชจ์˜ ์–‘์ž ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์ฃ .

์–‘์ž ๊ธฐ๊ณ„ ํ•™์Šต, ๊ฟˆ์„ ํ˜„์‹ค๋กœ! โœจ

Cirq๋Š” ์–‘์ž ๊ธฐ๊ณ„ ํ•™์Šต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด์š”. ์–‘์ž ์‹ ๊ฒฝ๋ง, ์–‘์ž ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹  ๋“ฑ ์ตœ์ฒจ๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Cirq๋กœ ๊ตฌํ˜„ํ•ด ๋ณด์„ธ์š”.

ํด๋ผ์šฐ๋“œ ์–‘์ž ์ปดํ“จํŒ…, ์† ์•ˆ์˜ ์–‘์ž ์ปดํ“จํ„ฐ! โ˜๏ธ

Cirq๋Š” ๊ตฌ๊ธ€, IBM ๋“ฑ ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์–‘์ž ์ปดํ“จํŒ… ํ”Œ๋žซํผ๊ณผ ์—ฐ๋™๋ผ์š”. Cirq๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํด๋ผ์šฐ๋“œ ์ƒ์˜ ์‹ค์ œ ์–‘์ž ์ปดํ“จํ„ฐ๋ฅผ ์ œ์–ดํ•˜๊ณ , ์–‘์ž ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”.

Cirq ๊ธ€์„ ๋งˆ์น˜๋ฉฐโ€ฆ ๐ŸŽฌ

์ž, ์ด๋ ‡๊ฒŒ ํ•ด์„œ Cirq์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ, ์‚ฌ์šฉ์ž ์ •์˜ ์–‘์ž ๊ฒŒ์ดํŠธ, ์–‘์ž ํšŒ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด์š”. ์–ด๋•Œ์š”? ์–‘์ž์ปดํ“จํŒ…, ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต์ง€ ์•Š์ฃ ? ๐Ÿ˜‰

Cirq๋Š” ์–‘์ž์ปดํ“จํŒ…์˜ ์„ธ๊ณ„๋กœ ํ–ฅํ•˜๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์˜ˆ์š”. ์ด ๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ์—ฌ์ •์— ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ์š”. ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ์งˆ๋ฌธํ•ด์ฃผ์„ธ์š”! ๐Ÿ˜Š

์–‘์ž์ปดํ“จํŒ…์˜ ๋ฏธ๋ž˜๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์†์— ๋‹ฌ๋ ค ์žˆ์–ด์š”! Cirq์™€ ํ•จ๊ป˜ ๋ฉ‹์ง„ ์–‘์ž ์„ธ์ƒ์„ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋ด์š”! ๐Ÿš€๐ŸŒŒ


Cirq ๊ด€๋ จ ๋™์˜์ƒ

YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail
YouTube Thumbnail

Cirq ๊ด€๋ จ ์ƒํ’ˆ๊ฒ€์ƒ‰

์•Œ๋ฆฌ๊ฒ€์ƒ‰


Leave a Comment