Category Archives: Science

วิทยาศาสตร์

Neural Network ไม่ควรใช้ Sigmoid Function ฤ

ไปเจอคลิป จากช่องที่น่าจะขึ้นชื่อด้าน AI บอกว่าไม่ควรใช้ Sigmoid function เป็น Activation function

ปะไว้ก่อน ในคลิปมีลิงก์ให้อ่านเพียบ (กำลังกระตุ้นตัวเองให้ทำอะไรบางอย่างต่อ) แต่ Sigmoid function ก็มีใช้ใน Logistic Regression (pdf อธิบายภาษาไทยได้เห็นภาพดี) อยู่เนอะ

Advertisements

ผลิตเชื้อเพลิงเหลว จากใบไม้เทียมชีวภาพ

ถ้าใช้จุลินทรีย์มาช่วยผลิตไฟฟ้า ก็มีทั้ง microbial fuel cell (MFC) หรือการผลิตเชื้อเพลิงในรูปของก๊าซ ก็มีบ่อหมักก๊าซชีวภาพ (biogas) อยู่แล้ว แต่ผลงานจาก Harvard ชิ้นนี้ผลิตได้เชื้อเพลิง isopropanol ซึ่งเป็นของเหลว ก็น่าจะบรรจุลงถังหรือพกพากันได้ง่ายๆ กว่าก๊าซหรือรอการชาร์จแบต และผลงานเป็นการดูดซับคาร์บอนไดออกไซด์ด้วย เลยเรียกมันว่า “ใบไม้ชีวภาพ” (bionic leaf 2.0) ทำเทียมจากแบคทีเรีย

ใช้แบคทีเรีย Raistonia eutropha ที่มีความสามารถในการตรึงคาร์บอนไดออกไซด์เมื่ออยู่ในภาวะบางอย่าง เช่นมีก๊าซไฮโดรเจนอยู่ด้วย แต่ในการผลิตไฮโดรเจนนั้น เดิมใช้ตัวเร่งปฏิกิริยาคือ nickel-molybdenum-zinc alloy ก็เจอผลข้างเคียงว่าจะได้สารจำพวก reactive oxygen species (ROS) ซึ่งเป็นอันตรายกับ DNA ของแบคทีเรีย ผลงานนี้จึงใช้ cobalt-phosphorous alloy เพื่อเลี่ยงปัญหา

อันที่จริง ถ้าใช้พวกสาหร่ายผลิตน้ำมันก็น่าจะผลิตเชื้อเพลิงเหลวได้ออกมาเหมือนๆ กัน แต่ผลงานนี้บอกว่าเมื่อใช้ร่วมกับระบบ photovoltaic ผลิตไฟฟ้าแล้ว (เอาไฟฟ้าจากแสงอาทิตย์ ไปแยกน้้ำให้ได้ไฮโดรเจนแล้วส่งให้แบคทีเรีย) ได้ประสิทธิภาพรวมราว 10% สูงกว่าการสังเคราะห์แสงตามธรรมชาติ

คลิปจาก Harvard ว่าได้ทำอะไรบ้าง เห็นผลงานจริงๆ ที่สร้างขึ้นมา

แต่ผมว่าคลิปเก่า ที่เกี่ยวกับงานนี้ จากผู้สื่อข่าว ทำให้เห็นภาพหลักการทำงานมากกว่า

ที่มา http://news.harvard.edu/gazette/story/2016/06/bionic-leaf-turns-sunlight-into-liquid-fuel/
http://science.sciencemag.org/content/352/6290/1210
รหัสวัตถุดิจิทัล DOI: 10.1126/science.aaf5039

ปล. ของ Berkeley http://www.sciguru.org/newsitem/13834/soil-microbe-super-efficient-biofuel-factory-scientists-explores-way-create-biofuels-minus-photosy

ปล. ขยายความเล็กน้อย งานนี้เป็นการจัดสภาพแวดล้อมให้แบคทีเรียดำรงชีพแบบ Lithoautotrophic โดย litho หมายถึง “หิน” คือได้ electron จากสารอนินทรีย์ ในกรณีนี้ สารอนินทรีย์คือไฮโดรเจน (H2 -> 2H + 2e-) ส่วนคำว่า auto หมายถึงได้แหล่งคาร์บอนมาจากการดูดคาร์บอนไดออกไซด์ได้เอง ไม่ต้องมาจากสารอินทรีย์ แบคทีเรียจึงได้รับ H2 และ CO2 มาผลิตเชื้อเพลิงให้เรา

https://en.wikipedia.org/wiki/Primary_nutritional_groups#Energy_and_carbon
[pdf] https://www.uni-due.de/imperia/md/content/water-science/4511_14___ws0809_sergej__nikolaevitch_winogradsky.pdf

แก้ Euler Project 551

ไปเจอปัญหาจาก Euler Project ข้อ 551 สรุปได้ว่า กำหนดลำดับ a(0), a(1), a(2), … โดย

a(n) = d(a(n-1)) + d(a(n-2)) + d(a(n-3)) + .. + d(a(1)) + d(a(0))

โดย a(0)=1 และ d(n) คือการเอาตัวเลขโดดของทุกหลักของเลข n มาบวกกัน (sum of digits) โจทย์ให้หาค่าของ a(1015)

ดูดีๆ จะเห็นว่า a(n) = d(a(n-1)) + a(n-1) ด้วยเช่นกัน ถ้าจะแก้แบบ recursive งานนี้ถ้าจะแก้กันง่ายๆ ตรงไปตรงมา เขียนด้วยภาษาสคริป Python ได้ว่า

def d(n):
    r = 0
    while n:
        r += n % 10
        n //= 10
    return r   

a=1
for i in xrange(1, 10**6):
    a+=d(a)

ซึ่งคำนวณถึงแค่ a(106) ก็ได้ค่า 31054319 ตรงกับที่ตัวอย่างให้มา ถ้าจะเอาให้ถึงตามโจทย์ สงสัยต้องหาทางแก้ non-homogeneous linear recurrence relation ให้ได้ก่อนครับ ก็อาจจะได้สมการที่มียกกำลัง n ออกมา หรืออาจต้องหาทางว่า มีความสัมพันธ์ที่จะย่อย n ให้ลงไปเป็เท่าๆ ตัว เช่น a(2n) = … ที่มี a(n..)

ปล. มีคนแจก source code วิธีแก้ในภาษา Python แล้วครับ ผมรันดูแล้วเสร็จในแป็ปเดียว https://git.icpc-camp.org/ftiasch/acm-icpc/blob/6d1d563a1dea39b8a8f525c836c5f3b0a243678b/project-euler/p551/p551.py

แก้ Euler Project 501

มีปัญหา Euler Project หมายเลข 501 ให้หาจำนวนตั้งแต่ 1 ถึง 1012 ว่ามีกี่ตัว ที่จำนวนตัวหารซึ่งหารแล้วลงตัวของมันนั้น มีเท่ากับ 8 ตัว

ถ้าใช้วิธีวนลูปตรงๆ คืิอไล่เลข 1 ถึง 1012 ที่ละตัว เอามาหารด้วยเลข 1 จนถึงตัวมันเอง แล้วนับว่ามีหารลงตัวแปดตัวหรือไม่ ช้าแน่ ต้องหาวิธีอื่น โดยใช้หลักคณิตศาตร์มาช่วย คือเมื่อเอาตัวเลขมาแยกตัวประกอบ ให้กลายเป็นผลคูณของจำนวนเฉพาะ ถ้าจำนวนเฉพาะมีซ้ำกันให้เขียนเป็นเลขยกกำลัง จำนวนของตัวหารที่ลงตัว เท่ากับเอาเลขชี้กำลังของแต่ละจำนวนเฉพาะนั้น มาบวกเพิ่มอีกหนึ่งแล้วคูณกัน

เช่น 24 = 2331 เลขชี้กำลังมี 3 และ 1 เอามาบวกเพิ่มอีก 1 จะได้ 4 และ 2 เมื่อคูณกันได้ 8 คือมีจำนวนตัวหารเท่ากับ 8 ตัว (24 นี้มี 1, 2, 3, 4, 6, 8, 12, 24) โดยเลข 8 สามารถได้มาจากการคูณ 8×1, 4×2, 2×4, 2x2x2 ถ้าเราจะไล่หาจำนวนที่มีตัวหารลงตัวแปดตัวโดยทำย้อนไป โดยเอาจำนวนเฉพาะมายกกำลังและคุณกัน โดยเลขชี้กำลังต้องเข้ากับเงื่อนไขที่จะทำให้มีตัวหารลงตัวแปดตัว ก็จะมีได้สี่กรณี

p7
p3q1
p1q3
p1q1r1

โดย 1 < p < q < r และทั้งสามเป็นจำนวนเฉพาะ

ลอง coding คร่าวๆ

##

import itertools
import math

def is_prime(num):
    if num < 2:
        return False
    for x in range(2, int(math.sqrt(num))+1):
        if num % x == 0:
            return False
    else:
        return True

def fd0(p, lmbd):
    r=0
    for x in (itertools.combinations(p, lmbd.__code__.co_argcount)):
        if lmbd(*x):
            r+=1
    return r
    
nn=100
lp=list(filter(is_prime, range(1, nn+1)))
a=fd0(lp, lambda x: x**7 <= nn)
b=fd0(lp, lambda x, y: x**3 *y <= nn)
c=fd0(lp, lambda x, y: y**3 *x <= nn)
d=fd0(lp, lambda x, y, z: x*y*z <= nn)
t1=a+b+c+d

nn=1000
lp=list(filter(is_prime, range(1, nn+1)))
a=fd0(lp, lambda x: x**7 <= nn)
b=fd0(lp, lambda x, y: x**3 *y <= nn)
c=fd0(lp, lambda x, y: y**3 *x <= nn)
d=fd0(lp, lambda x, y, z: x*y*z <= nn)
t2=a+b+c+d


##

แต่ถ้าทำถึงเลข 1012 ยังช้าอยู่นะครับ ต้องหาทางออกจากวนลูปเอง เมื่อการคูณเกินจำนวนที่กำหนดไว้

##
def is_prime(num):
    if num < 2:
        return False
    x=2
    while x*x<=num:
        if num % x == 0:
            return False
        x+=1
    return True

nn=10**6
lp=list(filter(is_prime, range(1, nn//6 +2)))
lp.sort()

r=0
for i in range(len(lp)):
    if lp[i]**7 > nn:
        break
    else:
        r+=1

for i in range(len(lp)):
    for j in range(i+1, len(lp)):
        if lp[i]**3 *lp[j] > nn:
            break
        else:
            r+=1

for i in range(len(lp)):
    for j in range(i+1, len(lp)):
        if lp[j]**3 *lp[i] > nn:
            break
        else:
            r+=1

for i in range(len(lp)):
    for j in range(i+1, len(lp)):
        if lp[i]*lp[j] > nn:
            break
        for k in range(j+1, len(lp)):
            if lp[i]*lp[j]*lp[k] > nn:
                break
            else:
                r+=1
          
print(r)
##

ชมงาน Bangkok Mini Maker Faire 2015

ไปงาน Bangkok Mini Maker Faire 2015 ที่ลานหน้า Hard Rock Cafe Siam Square ก็เก็บภาพ ทวีตมาฝาก เริ่มเลยครับ ไล่ดูเลย

ระนาด มีกลไกทำจากชิ้นส่วน hard disk เก่า บอร์ดที่ใช้ขับ รองรับ MIDI ด้วย

Mechatronics Thai Wooden Xylophone (MIDI supported) #bkkminimakerfaire #ระนาด

A post shared by ohmohm (@ultimateohm) on

ชุดละครเวที

แซคโซโฟนไม้ไผ่

Bamboo Soprano Saxophone from Thailand #bkkminimakerfaire

A post shared by ohmohm (@ultimateohm) on

รองเท้าส้นสูง

แนว steampunk ย้อนยุคหน่อยๆ

BB-8 ก็มา

อาหารแมว

เครื่องพิมพ์สามมิติ สำหรับอาหาร

 

Phenotype

โครโมโซมเพศ XY ก็อาจมีโรคทางพันธุกรรมหรือการกลายพันธุ์ที่ทำเกิดมามี phenotype เป็นหญิงก็ได้ เช่น Androgen insensitivity syndrome หรือกลับกัน XX เกิดเป็นชายก็ได้

ธาตุในภาษารัสเซีย

เรียนเคมี มีการท่องชื่อธาตุในลำดับตารางธาตุ แล้วถ้าเป็นศัพท์ภาษารัสเซียแล้ว 20 ตัวแรก ดังนี้
1. H Водоро́д (ถ้า Изотопы ก็มี Дейте́рий และ Три́тий อย่าสับสนกับ третий ซึ่งแปลว่า 3-й ส่วน Вода́ แปลว่าน้ำ)
2. He Ге́лий
3. Li Ли́тий
4. Be Бери́ллий
5. B Бор
6. C Углеро́д (у́голь แปลว่าถ่าน)
7. N Азо́т
8. O Кислоро́д (кислота́ แปลว่ากรด ки́слый แปลว่าเปรี้ยว)
9. F Фтор
10. Ne Нео́н
11. Na На́трий
12. Mg Ма́гний
13. Al Алюми́ний
14. Si Кре́мний
15. P Фо́сфор
16. S Се́ра
17. Cl Хлор
18. Ar Арго́н
19. K Ка́лий
20. Ca Ка́льций