Yapay zeka nedir

Arkadaşlar diğer başlıkta bir yanlış anlaşılma olduğu kanaatindeyiz.

Teknik konularda bilgi sahibi olmadan fikir sahibi olunmaz.

Örneğin limonun fiyatını herkes konuşabilir.

Ancak teknik konularda soru sormak için bile bilgi birikimi gerekir.

Yapay zekanın ne olduğunu anladığını düşünenler zamanında Ubuntu forumlarında sorduğumuz 8 bilmece problemini kağıt üzerinde çözsünler.

Zamanında Akın Robotik’e iş mülakatı için müracaat etmiştik. Geliştirmemizi istedikleri uygulama 8 bilmece probleminin çok daha basit ama görsel sürümü idi.

Uzmanlık alanımız yapay zeka olmasa da konu ile bir parça ilgiliyiz.

Zamanında CS188 Yapay Zeka’ya giriş dersi almış ama tamamlamadan bırakmıştık.

O derste sizden bir Pacman oyunu için arama algoritması yazmanızı istiyorlar.

Teknik konularda arkadaşlarla sohbet etmek hoşumuza gider.

Örneğin Tütev’de D ve C++11 konusunda bir seminer olmuştu. Buna katılmıştık.

Günlük hayatta da bazen böyle insanlarla tanışma imkanımız oluyor.

Yonga üretiminde de artık yapay zeka kullanılıyor ve anlaşıldığına göre beğenilirse ücretsiz olarak üretiliyor.

https://efabless.com/open_shuttle_program

https://developers.google.com/silicon?hl=tr

ABD Savunma Bakanlığı yarı iletken üretim tasarına 15 milyon dolar aktarmış.

Nacizane fikrimiz adamlar bunu babalarının hayrına yapmıyor.

Bu konunun daha ilerisinde, bir ülkenin diğer bir ülkenin elektronik ve yazılım sistemlerine saldırıp etkisiz hale getirmesi tahayyül edilebilir.

Alıntı :

Üretilen yongalarda ve elektronik devrelerde bazen tasarımı yapanlar, bazen üreticiler bazen de üçüncü şahıslar, devrelerin tasarım amaçları dışında çalışacak ek donanım koyarlar.

Konunun bizimle alakalı olan kısmına dönersek örneğin yazılım geliştirme ile ilgili bu sayfanın kurallarının 6. maddesine bakınız.

Yazılım geliştirme ile ilgili bazı yabancı sitelerde ChatGPT tamamen yasaklanmış.

Yanlış anlaşılma nedir ?

İlk kez giriş yaptıktan ve soruları yanıtladıktan sonra, verdiğim yanıtların yapay zeka tarafından oluşturulduğunu mu düşündünüz? Gönderi biçimlendirmesine dikkat ederek, düzgün ve saygılı bir Türkçe kullanıp, konuya hakim yanıtlar verdiğimde, aklınıza gelen ilk şey yapay zeka ile kopyala yapıştır yapmak mı oldu?

Bu aşağılayıcı bir ifade, gereksiz özgüvenli ve yapay zeka hakkında hiçbir fikriniz olmadığını düşünüyorum.

“8 bilmece problemi” hakkında konuşmama bile gerek yok, bu şekilde abartılı bir şekilde anlatmanız komik.

45 dakikada kullanıcı arayüzünü de dahil ederek kodladım. Eğer zaman ayırırsam, en fazla 3-4 saat içinde çok daha optimize edilmiş ve karma tablolarıyla daha gelişmiş bir algoritma yazabilirim.
8 bilmece probleminin yapay zeka ile bir ilgisi yok.

import tkinter as tk
from tkinter import messagebox
import heapq
import random

class State:
    def __init__(self, board, parent=None, move=None, cost=0):
        self.board = board
        self.parent = parent
        self.move = move
        self.cost = cost
        self.size = len(board)
        self.goal_board = self.generate_goal_board()
        self.heuristic = self._calculate_heuristic()

    def generate_goal_board(self):
        goal_board = [[0] * self.size for _ in range(self.size)]
        num = 1
        for i in range(self.size):
            for j in range(self.size):
                goal_board[i][j] = num
                num = (num + 1) % (self.size ** 2)
        goal_board[self.size - 1][self.size - 1] = 0
        return goal_board

    def _calculate_heuristic(self):
        distance = 0
        linear_conflict = 0
        
        for i in range(self.size):
            for j in range(self.size):
                num = self.board[i][j]
                if num != 0:
                    x, y = divmod(num - 1, self.size)
                    distance += abs(x - i) + abs(y - j)
                    
                    if x == i:
                        for k in range(j + 1, self.size):
                            other = self.board[i][k]
                            if other != 0 and other // self.size == x and other < num:
                                linear_conflict += 2
                    if y == j:
                        for k in range(i + 1, self.size):
                            other = self.board[k][j]
                            if other != 0 and other % self.size == y and other < num:
                                linear_conflict += 2
        
        return distance + linear_conflict

    def __lt__(self, other):
        return (self.cost + self.heuristic) < (other.cost + other.heuristic)

    def get_neighbors(self):
        neighbors = []
        x, y = next((i, j) for i in range(self.size) for j in range(self.size) if self.board[i][j] == 0)
        for dx, dy, move in [(1, 0, 'aşağı'), (-1, 0, 'yukarı'), (0, 1, 'sağ'), (0, -1, 'sol')]:
            nx, ny = x + dx, y + dy
            if 0 <= nx < self.size and 0 <= ny < self.size:
                new_board = [row[:] for row in self.board]
                new_board[x][y], new_board[nx][ny] = new_board[nx][ny], new_board[x][y]
                neighbors.append(State(new_board, self, move, self.cost + 1))
        return neighbors

def astar_search(start, goal):
    open_list = []
    heapq.heappush(open_list, start)
    closed_set = set()

    while open_list:
        current = heapq.heappop(open_list)

        if current.board == goal:
            path = []
            while current.move is not None:
                path.append(current)
                current = current.parent
            return path[::-1]

        closed_set.add(tuple(map(tuple, current.board)))

        for neighbor in current.get_neighbors():
            if tuple(map(tuple, neighbor.board)) not in closed_set:
                heapq.heappush(open_list, neighbor)

    return None

def solve_puzzle(start_board, size):
    goal_board = [[0] * size for _ in range(size)]
    num = 1
    for i in range(size):
        for j in range(size):
            goal_board[i][j] = num
            num = (num + 1) % (size ** 2)
    goal_board[size - 1][size - 1] = 0

    start_state = State(start_board)

    solution = astar_search(start_state, goal_board)

    if solution:
        steps = len(solution)
        steps_text = " -> ".join(step.move for step in solution)
        display_solution(start_board, solution)
        messagebox.showinfo("Çözüm bulundu", f"Çözüm: {steps_text}\n\nAdım sayısı: {steps}")
    else:
        messagebox.showinfo("Çözüm Yok", "Çözüm bulunamadı.")

def create_entry_fields(root, size):
    entry_fields = []
    for i in range(size):
        row = []
        for j in range(size):
            entry = tk.Entry(root, width=5, font=('Arial', 14), justify='center')
            entry.grid(row=i+2, column=j, padx=10, pady=10)
            row.append(entry)
        entry_fields.append(row)
    return entry_fields

def fill_randomly(entry_fields, size):
    numbers = list(range(size * size))
    random.shuffle(numbers)
    for i in range(size):
        for j in range(size):
            entry_fields[i][j].delete(0, tk.END)
            entry_fields[i][j].insert(0, str(numbers.pop(0)))

def on_puzzle_size_button_click(root, size_entry):
    try:
        size = int(size_entry.get())
        if size < 2:
            raise ValueError("Bulmaca boyutu en az 2 olmalıdır.")
        
        entry_fields = create_entry_fields(root, size)
        
        def on_solve_button_click():
            try:
                start_board = []
                values = set()
                for i in range(size):
                    row = []
                    for j in range(size):
                        value = int(entry_fields[i][j].get())
                        if value in values or value < 0 or value >= size ** 2:
                            raise ValueError("Geçersiz girdi")
                        values.add(value)
                        row.append(value)
                    start_board.append(row)
                
                solve_puzzle(start_board, size)
            except ValueError as e:
                messagebox.showerror("Geçersiz girdi", str(e))
        
        solve_button = tk.Button(root, text="Çöz", font=('Arial', 16, 'bold'), command=on_solve_button_click)
        solve_button.grid(row=size+2, columnspan=size, pady=10)
        
        random_button = tk.Button(root, text="Rastgele Doldur", font=('Arial', 16, 'bold'), command=lambda: fill_randomly(entry_fields, size))
        random_button.grid(row=size+3, columnspan=size, pady=10)
    
    except ValueError as e:
        messagebox.showerror("Geçersiz girdi", str(e))

def display_solution(start_board, solution):
    solution_window = tk.Toplevel()
    solution_window.title("Çözüm Adımları")
    
    size = len(start_board)
    board = start_board
    
    for step in solution:
        frame = tk.Frame(solution_window)
        frame.pack(pady=5)
        board = step.board
        for i in range(size):
            row_frame = tk.Frame(frame)
            row_frame.pack(side=tk.TOP)
            for j in range(size):
                label = tk.Label(row_frame, text=str(board[i][j]), font=('Arial', 14), width=4, height=2, borderwidth=2, relief="groove")
                label.pack(side=tk.LEFT)
        step_label = tk.Label(solution_window, text=f"Adım: {step.move}", font=('Arial', 12))
        step_label.pack()

def create_gui():
    root = tk.Tk()
    root.title("Bulmaca Çözücü")
    
    size_label = tk.Label(root, text="Bulmaca boyutunu girin (örneğin, 3x3 bulmaca için 3):", font=('Arial', 12))
    size_label.grid(row=0, column=0, padx=10, pady=10)
    
    size_entry = tk.Entry(root, width=5, font=('Arial', 14), justify='center')
    size_entry.grid(row=0, column=1, padx=10, pady=10)
    
    puzzle_size_button = tk.Button(root, text="Bulmaca Boyutu", font=('Arial', 16, 'bold'), command=lambda: on_puzzle_size_button_click(root, size_entry))
    puzzle_size_button.grid(row=1, columnspan=2, pady=10)

    root.mainloop()

def main():
    create_gui()

if __name__ == "__main__":
    main()

Yine derslere göz attım ancak kayda değer hiçbir konu bulamadım. Sadece Python ve veri yapılarının temelleri ile birlikte temel matematik dersleri var. :smiley:

Bu durumu kodlamak için zaman harcamaya değmez, karar ağacı veya ağaç budama yöntemleri ile kolaylıkla çözülebilir.

İlk konuda yazdığınız fikriniz ile çelişiyor.

Muhtemelen bu kadar büyük bir sayfanın gönderileri API istekleri ile işlenip yanıtlar üretiliyor. Ayrıca, kimse sayfasının verilerini makine öğrenme modellerinin eğitimi için vermek istemez. Bu forumda API ile cevap üreten ya da kopyala-yapıştır yapan kimse yok.

Daha uzun ve çok sayıda cevap verilebilir ancak üslubunuzu beğenmediğim için detaylı bir açıklama yapmıyorum.

Sevgili genç arkadaşlarım , eğer ki bir yazılım faydalı işlerde kullanılırsa faydalıdır. Atomun çekirdeğini parçalayanlar atom bombası yapılsın diye parçalamadılar. Faydalı işlerde kullanılmayan hiç bir yazılım güvenli değildir. Yapay zeka da bunlardan birisidir. Bu türlü olumsuz anlaşılacak tartışmalara gerek yok. Önemli olan insanlık yararına güzel olumlu şeyler üretebilmektir.

Aydın Bey kitaplığımızdaki kitaplardan bazılarını örnek verelim.

  • Artificial Intelligence : A Modern Approach
    Yazarları : Russell ve Peter Norvig
  • Introduction to Robotics: Mechanics and Control
    Yazarı : John J. Craig
  • Robot Modeling and Control
    Yazarı : Mark W. Spong

Konu ile ilgili daha başka kitaplar da var.

Mat Buckland’ın oyunlarda yapay zeka kullanımı ile ilgili Programming Game AI By Example kitabını hızlıca okumuştuk.

Diğer başlıkta, konuyu yanlış anladığını düşündüğümüz bazı arkadaşlara özel ileti göndererek durumu izah ettik.

Sorun bizim açımızdan çözülmüştür.

Yazılım geliştirme ile hiç alakası olmayan biri Ali’nin yazdığı kodu çekebilir.

Buna çatallama diyorlar. Dallama, budaklama denilebilir.

Veli’nin oradan buradan çatalladığı kaynak kodu sanki kendi yazdığı uygulama gibi göstermesinin ne faydası olabilir ?

İşi bilmeyenler Veli ne programcı imiş diye düşünebilirler.

Diğer taraftan yazılım geliştirme ile uğraşanlar deponun çatal olup olmadığını şıp diye anlarlar.

Böyle insanları muhatap kabul etmiyoruz.

Çatalla çorba içilmez.

O başlıkta zamanında yazan bazı arkadaşlar şimdi daha yüksek bölümleri okumuşlar.

Geçenlerde yurt dışında elektronik alanında çalışan bir ağabey ile tanışmıştık.

Bu insanlar iyi bir eğitim alma fırsatını yakalamalarına rağmen mütevaziliği de elden bırakmıyorlar.

Ne kadar güzel.